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

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

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)))

我也希望主题(legend.key.size = grid :: unit(2,’cm’))可以扩大图例键中对象的大小,但似乎没有这样做.

建议?
也开放其他想法如何使图表更清晰.

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

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)

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

更改图例中点的大小更令人沮丧.也许你想尝试一个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))

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

点赞