排列多个图例是R.绘制图幅时常见的问题。theme()函数在ggplot2软件包中允许在水平或垂直方向上排列多个图例。然而,在某些情况下,有些传说是长的,而另一些是短的。它倾向于将短传奇叠加在一行或一列中,而将长传奇留在另一行或一列中。theme()函数中仅有的两种选择“水平”或“垂直”是不令人满意的。
另一种方法是通过get_legend()函数在牛仔包中从绘图中提取图解。然而,在由plot_grid()函数安排之后,传奇之间的边距不能消除。我怎样才能消除传说之间的空白(灰色地带)?
可复制的例子如下:
p1 <- ggplot(mtcars) +
geom_bar(aes(x=as.factor(am), fill=as.factor(am))) +
theme(legend.margin = margin(0,unit="pt"))
p2 <- ggplot(mtcars) +
geom_bar(aes(x=as.factor(vs), fill=as.factor(vs))) +
theme(legend.margin = margin(0,unit="pt"))
p3 <- ggplot(mtcars) +
geom_bar(aes(x=as.factor(carb),fill=as.factor(carb))) +
scale_fill_manual(breaks = c(1,2,3,4,5,6,7,8),values = c('#f7fcfd','#e5f5f9','#ccece6','#99d8c9','#66c2a4','#41ae76','#238b45','#005824'))+
theme(legend.margin = margin(0,unit="pt"))
leg1 <- get_legend(p1+theme(legend.background = element_rect(fill="white")))
leg2 <- get_legend(p2+theme(legend.background = element_rect(fill="white")))
leg3 <- get_legend(p3+theme(legend.background = element_rect(fill = "white")))
leg12 <- plot_grid(leg1,leg2,nrow=2)+theme(plot.background = element_rect(fill="grey"))
leg123 <- plot_grid(leg3,leg12,nrow = 1)+theme(plot.background = element_rect(fill="grey"))
ggdraw(leg123)

我想要的是这样的:

发布于 2020-06-22 14:22:58
ggplot2和任何其他使用图形设备的R应用程序的输出与图形窗口的分辨率和大小直接相关。基本上,文本和其他绘制层之间的缩放是不同的,这意味着如果更改窗口的大小,输出就会发生变化。如果我接受您的代码,您可以通过将不同的width=和height=参数发送到ggsave()来看到效果
# kind of the default output for me
ggsave('a0.png', width=8, height=5)

# this gets you something like what you wanted
ggsave('a.png', width=3, height=2)

如果你把这个和阴谋放在一起..。使用同样的一般想法,你应该能够得到一些有用的东西。
https://stackoverflow.com/questions/62511261
复制相似问题