Я пытаюсь создать график, который будет представлять собой комбинацию из 6 графиков, созданных в ggplot2.Условия:
- Один основной заголовок
- Три субтитра
- Общий цвет фона
- Различные размеры сюжетов
- Одна легендавнизу
И это должно выглядеть примерно так: ![Desired plot](https://i.stack.imgur.com/sCCky.png)
Я нашел биты и кусочки, но я не знаю, как их поставитьсовмещены.
Для добавления основного заголовка я использовал Поместите заголовок панели мультиплота с помощью ggplot2
layout <- matrix(c(1, 1, 2, 3, 3, 4), nrow = 2, byrow = TRUE)
grid.arrange(A, B, C, D, top = "Title",
layout_matrix = layout)
![Plot with grid.arrange](https://i.stack.imgur.com/WPakQ.png)
Iнашли функцию multiplot (http://www.cookbook -r.com / Graphs / Multiple_graphs_on_one_page_ (ggplot2) / ) и позволяют дозировать несколько графиков с разными размерами, но другие требования не выполняются
plot_list <- list(A, B, C, D)
layout <- matrix(c(1, 1, 2, 3, 3, 4), nrow = 2, byrow = TRUE)
multiplot(plotlist = plot_list, layout = layout)
![Plot with multiplot](https://i.stack.imgur.com/D3PpF.png)
Я также нашел, как создать общую легенду, но размеры диаграмм одинаковы ( Добавить общую легенду для комбинированных ggplots )
grid_arrange_shared_legend <- function(...) {
plots <- list(...)
g <- ggplotGrob(plots[[1]] + theme(legend.position="bottom"))$grobs
legend <- g[[which(sapply(g, function(x) x$name) == "guide-box")]]
lheight <- sum(legend$height)
grid.arrange(
do.call(arrangeGrob, lapply(plots, function(x)
x + theme(legend.position="none"))),
legend,
ncol = 1,
heights = unit.c(unit(1, "npc") - lheight, lheight))
}
grid_arrange_shared_legend(A, B, C, D)
![Plot with grid_arrange_shared_legend](https://i.stack.imgur.com/nozAu.png)
пример данных
DF <- data.frame(ID = 1:10, Pop = (1:10)^2, gr = c("A", rep("B", 8), "A"))
DF_Pie <- DF %>%
group_by(gr) %>%
summarise(Years = n(),
Pop_Years = sum(Pop))
A <- ggplot(DF, aes(x = ID, col = gr, fill = gr)) +
geom_bar()+
theme(legend.position="none")
B <- ggplot(DF_Pie, aes(x = factor(1), y = Years, fill = gr))+
geom_bar(width = 1, stat = "identity") +
coord_polar("y", start=0)+
theme(legend.position="none")
C <- ggplot(DF, aes(x = ID, y = Pop, col = gr, fill = gr)) +
geom_bar(stat="identity") +
theme(legend.position="bottom")
D <- ggplot(DF_Pie, aes(x = factor(1), y = Pop_Years, fill = gr))+
geom_bar(width = 1, stat = "identity") +
coord_polar("y", start=0) +
theme(legend.position="none")
РЕДАКТИРОВАТЬ
Благодаря @ hpesoj626 я знаюкак сделать все, но условие 3 все еще применяется - общий цвет фона ![Chart after hpesoj626 changes](https://i.stack.imgur.com/GWlMK.png)
РЕДАКТИРОВАТЬ 2
Я создал следующую диаграмму
но пространство между сюжетами и заголовками огромно