Сводная таблица с диаграммой на выходе

это мой желаемый результат, мой желаемый результат - получить сводную таблицу с диаграммой в одном выводе


  T1 <- as.data.frame(table(data[[var]]))
  bar_chart <- barchart(data[[var]]))
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
204
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не могу воспроизвести ваш пример, но я понимаю, что вы хотите объединить таблицу и график. В качестве примера я использовал некоторые гипотетические данные.

Вы можете создать таблицу как объект grob, используя функцию tableGrob из пакета gridExtra, преобразовать объект ggplot в объект grob, используя ggplotGrob из пакета ggplot2, а затем комбинировать их по-разному.

  1. Функция annotation_custom из пакета ggplot2: здесь вы можете выбрать пустой ggplot и расположить таблицу и график в разных областях пустого графика (см. пример кода ниже)
# making the plot 
plot_df <- data.frame(x=LETTERS[1:5], y=1:5)
plot <- ggplot(plot_df, aes(x, y))+
  geom_col()

# making the table
table_df <- data.frame(x=LETTERS[1:10], y=1:10)
tabl <- tableGrob(d = table_df)

# making the feck plot that will contain the plot and the table
feck_plot_df <- data.frame(x=0:1, y=0:1)
p <- ggplot(feck_plot_df)+
  geom_blank()+
  annotation_custom(grob = tabl, 
                    xmin = -Inf, xmax = 0.1, ymin = 0.15, ymax = 0.9)+
  annotation_custom(grob = ggplotGrob(plot), 
                    xmin = 0.1, xmax = 1, ymin = -Inf, ymax = 1)

# saving the combined plot 
ggsave(plot = p, filename = 'combined_plot.png', device = 'png', dpi = 300,
       width = 7.04, height = 3.77)

Вы также можете заставить гибкую таблицу растрировать flexible::as_raster, затем использовать grid::rasterGrob и упорядочить вещи в пустой ggplot. На основе ваших обновлений ниже приведена попытка упорядочить 3 сюжета.

tabl <- tab_std(data=df, var = "col1", Name_of_variable = "state")
chrt <- donut(df,"col1")

tabl <- tab_std(data=df, var = "col1", Name_of_variable = "state")
bplt <- single_bar(df,"col1", SORT = TRUE)

ggplot() + 
  theme_void()+
  annotation_custom(grid::rasterGrob(as_raster(tabl)), xmin=-Inf, xmax=0.5, ymin=0.5, ymax=Inf)+
  annotation_custom(ggplotGrob(chrt), xmin=-Inf, xmax=0.5, ymin=-Inf, ymax=0.5)+
  annotation_custom(ggplotGrob(bplt), xmin=0.5, xmax=Inf, ymin=-Inf, ymax=Inf)
  1. Функции макетов на основе сетки из пакета gridExtra: здесь вы можете попробовать grid.arrange, аранжироватьGrob или gtable_cbind.
tabl <- tab_std(data=df, var = "col1", Name_of_variable = "state")
chrt <- donut(df,"col1")

tabl <- tab_std(data=df, var = "col1", Name_of_variable = "state")
bplt <- single_bar(df,"col1", SORT = TRUE)


grid.arrange(grid::rasterGrob(as_raster(tabl)), ggplotGrob(chrt), ggplotGrob(bplt),
             layout_matrix = cbind(rbind(1,2), rbind(3,3)))

Как только вы сохраните график где-нибудь, вы можете просто включить его в свой rmarkdown, используя функцию include_graphics из пакета knitr. Вы также можете напрямую включить его без сохранения.

Спасибо за помощь, но я ищу общее решение, потому что у меня есть больше диаграмм, таких как пончики, линии и т. д. с таблицами в некоторых сценариях.

user14176250 22.12.2020 13:54

я обновил свою функцию, чтобы получить воспроизводимый пример

user14176250 22.12.2020 15:46

Хорошо, что вы подразумеваете под «общим решением»? Из вашего обновленного кода я получил 2 графика и таблицу. Вы просто хотите объединить графики и таблицу в один файл или как? и как вы хотите этого добиться?

LHI 23.12.2020 03:50

проверьте обновленный ответ на основе ваших обновлений. Это то, что вы ищете?

LHI 23.12.2020 04:35

на самом деле решение «функция annotation_custom из пакета ggplot2:» кажется идеальным, но я много пробовал, чтобы заставить его работать для моей функции, но у меня это не работает. Я пытаюсь создать функцию и передать один график и таблицу в качестве входных параметров этой функции и получить результат комбинированной таблицы и функции.

user14176250 07.01.2021 12:35

Другие вопросы по теме