我试图在页面中排列4个图表,将图例放在底部中心
我用它来获取其中一个图的图例(因为它们对于四个图都是相同的)
get_legend<-function(myggplot){
tmp <- ggplot_gtable(ggplot_build(myggplot))
leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
legend <- tmp$grobs[[leg]]
return(legend)
}
然后,我从任何一个图中得到了传说
legend <- get_legend(p2)
所以对于我使用的数字:
tt <-grid.arrange(arrangeGrob(p6, p7, p8, p9, legend,
nrow = 2, #
left = textGrob("Mammalian species richness", rot = 90, vjust = 1,
gp = gpar(fontsize = 12))))
但我得到的是:
如何将图例移动到中心按钮并有2列2列?
命令nrow
,ncol
无法正常工作,因为我收到了错误消息,而不是
tt <- tt + theme(legend.position ="bottom").
PS。为了防止这个信息很重要,如果我试图不放置任何图例,我可以根据需要将四个图形放在网格中,但是没有图例,所以,你理解这不适合发布。
答案 0 :(得分:0)
您可以使用layout_matrix
中的参数grid.arrange
进行更多控制。
可重复的例子,
library(ggplot2)
library(gridExtra)
get_legend<-function(myggplot){
tmp <- ggplot_gtable(ggplot_build(myggplot))
leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
legend <- tmp$grobs[[leg]]
return(legend)
}
p <- ggplot()
p2 <- ggplot(mtcars, aes(mpg, wt, col=factor(am))) + geom_point()
legend <- get_legend(p2)
grid.arrange(p, p, p, p, legend,
layout_matrix=rbind(c(1,2,3), c(4,5,5)))
哪个产生
或许你想要
grid.arrange(p, p ,p, p, legend,
layout_matrix=rbind(c(1,1,2,2,5), c(3,3,4,4,5)))
答案 1 :(得分:0)
为了补充 user20650
的答案并完全回答 OP,我已经绘制了四次相同的图,但我解决了这个问题。
为了能够使用以下代码,您需要为 cowplot
格式安装 ggpubr
和 gridExtra
包。
虽然 OP 有获取图例信息的功能,但我遇到了一些问题,所以我不得不使用 cowplot
。
有关 layout_matrix
格式,请参阅 this page。
library(cowplot)
library(ggplot2)
library(gridExtra)
library(ggpubr)
p = ggplot2::ggplot(mtcars, aes(mpg, wt, col = factor(am))) +
ggplot2::geom_point() +
scale_color_discrete(name = "Car Type", labels=c("fast", "slow"), ) +
labs(x = '', y = '') +
ggtitle('Car') +
theme_bw() +
theme(plot.title = element_text(size = 8, hjust = 0.5),
axis.text.x = element_text(angle = 30, hjust = 1),
legend.position = 'top')
legend = cowplot::get_legend(p)
p = p + ggplot2::theme(legend.position = 'none')
gridExtra::grid.arrange(grobs = list(p, p, p, p, legend),
left = ggpubr::text_grob("Width",
rot = 90,
vjust = 1),
bottom = ggpubr::text_grob("Mile Per Gallon",
rot = 0,
vjust = 0),
layout_matrix = rbind(c(5, 5),
c(1, 2),
c(1, 2),
c(1, 2),
c(1, 2),
c(1, 2),
c(1, 2),
c(1, 2),
c(3, 4),
c(3, 4),
c(3, 4),
c(3, 4),
c(3, 4),
c(3, 4),
c(3, 4)))