我发现形状和线型的组合图例难以破译。特别是,形状很难看,因为它在线后面而且太小了。
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'))
能够扩大图例键中对象的大小,但似乎没有这样做。
建议? 也欢迎其他想法如何使图表更清晰。
答案 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)
更改图例中点的大小更令人沮丧。也许你想尝试一个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))