我发现形状和线型的组合传奇难以破译.特别是,形状很难看,因为它在线后面而且太小了.
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)
更改图例中点的大小更令人沮丧.也许你想尝试一个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))