это мой желаемый результат, мой желаемый результат - получить сводную таблицу с диаграммой в одном выводе
T1 <- as.data.frame(table(data[[var]]))
bar_chart <- barchart(data[[var]]))
Я не могу воспроизвести ваш пример, но я понимаю, что вы хотите объединить таблицу и график. В качестве примера я использовал некоторые гипотетические данные.
Вы можете создать таблицу как объект grob
, используя функцию tableGrob
из пакета gridExtra
, преобразовать объект ggplot
в объект grob
, используя ggplotGrob
из пакета ggplot2
, а затем комбинировать их по-разному.
# 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)
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
. Вы также можете напрямую включить его без сохранения.
я обновил свою функцию, чтобы получить воспроизводимый пример
Хорошо, что вы подразумеваете под «общим решением»? Из вашего обновленного кода я получил 2 графика и таблицу. Вы просто хотите объединить графики и таблицу в один файл или как? и как вы хотите этого добиться?
проверьте обновленный ответ на основе ваших обновлений. Это то, что вы ищете?
на самом деле решение «функция annotation_custom из пакета ggplot2:» кажется идеальным, но я много пробовал, чтобы заставить его работать для моей функции, но у меня это не работает. Я пытаюсь создать функцию и передать один график и таблицу в качестве входных параметров этой функции и получить результат комбинированной таблицы и функции.
Спасибо за помощь, но я ищу общее решение, потому что у меня есть больше диаграмм, таких как пончики, линии и т. д. с таблицами в некоторых сценариях.