在组合ggplot指南中更改一个指南的大小/顺序

时间:2015-12-09 19:59:16

标签: r ggplot2

我发现形状和线型的组合图例难以破译。特别是,形状很难看,因为它在线后面而且太小了。

library(ggplot2)
ggplot(mtcars)+
geom_point(aes(x=hp,y=mpg,shape=as.factor(cyl)))+
geom_smooth(aes(x=hp,y=mpg,linetype=as.factor(cyl)),method='lm')+
theme_bw(base_size=18)

如何在不增加线条大小的情况下增加图例中形状的大小?

下面这个尝试增加了两者的大小(不是我想要的)。 guide_legend的顺序似乎也不会影响图例键中符号的顺序。更改geom_point和geom_smooth的顺序将在图例中产生所需的结果,但不会在图中显示。

+guides(linetype=guide_legend('Cylinders'),shape=guide_legend('Cylinders',override.aes=list(size=3)))

我也希望theme(legend.key.size=grid::unit(2,'cm'))能够扩大图例键中对象的大小,但似乎没有这样做。

建议? 也欢迎其他想法如何使图表更清晰。

1 个答案:

答案 0 :(得分:2)

图例按照绘制顺序生成线条和点,因此为了获得线条前面的点,您可以执行此操作:

ggplot(mtcars)+
  geom_smooth(aes(x=hp,y=mpg,linetype=as.factor(cyl)),method='lm')+
  geom_point(aes(x=hp,y=mpg,shape=as.factor(cyl)))+
  theme_bw(base_size=18)

enter image description here

更改图例中点的大小更令人沮丧。也许你想尝试一个hack,它允许你从一个情节中取出一个传说并把它放在另一个情节上:

library(gtable)
library(gridExtra)

# Has the legend you want
p1 <- ggplot(mtcars)+
  geom_smooth(aes(x=hp,y=mpg,linetype=as.factor(cyl)),method='lm')+
  geom_point(aes(x=hp,y=mpg,shape=as.factor(cyl)),size=3)+
  theme_bw(base_size=18)+labs(shape="Cylinders",linetype="Cylinders")

# Has the plot you want
p2 <- ggplot(mtcars)+
  geom_smooth(aes(x=hp,y=mpg,linetype=as.factor(cyl)),method='lm')+
  geom_point(aes(x=hp,y=mpg,shape=as.factor(cyl)))+
  theme_bw(base_size=18)+theme(legend.position="none")

# Take the legend from p1
fill.legend <- gtable_filter(ggplot_gtable(ggplot_build(p1)), "guide-box") 
legGrob <- grobTree(fill.legend)

# Put the legend from p1 onto p2
grid.arrange(p2, legGrob, ncol=2, widths = c(6,1))

enter image description here