控制ggplot2图例外观而不影响图形

77

我用ggplot2绘制线条的代码如下:

ggplot(iris, aes(Petal.Width,Petal.Length,color=Species)) + geom_line() + theme_bw()

当前图表

我发现图例标记太小了,所以希望它们变大。如果我改变大小,图表上的线条也会改变:

ggplot(iris, aes(Petal.Width,Petal.Length,color=Species)) + geom_line(size=4) + theme_bw()

粗线条.

但我只想要在图例中看到粗线条,而在图表中的线条仍需细。我尝试使用 legend.key.size,但它只改变了标记的正方形大小,而不是线条的宽度:

library(grid)  # for unit
ggplot(iris,aes(Petal.Width,Petal.Length,color=Species))+geom_line()+theme_bw() + theme(legend.key.size=unit(1,"cm"))

大图例键

我也尝试使用点:

ggplot(iris,aes(Petal.Width,Petal.Length,color=Species)) + geom_line() + geom_point(size=4) + theme_bw()

当然,它仍然会影响到情节和图例:

points

我想在情节中使用线条,在图例中使用点。

所以我有两个问题:

  1. 如何在不改变情节的情况下更改图例中线条的宽度?
  2. 如何在情节中绘制线条,但在图例中绘制点/圆点/正方形?
1个回答

117

如果您只想更改图例中的线条宽度,则应使用函数guides(),然后对于colour=,使用guide_legend()并设置override.aes=size=。这将覆盖绘图中使用的大小,并仅在图例中使用新的大小值。

ggplot(iris,aes(Petal.Width,Petal.Length,color=Species))+geom_line()+theme_bw()+
       guides(colour = guide_legend(override.aes = list(size=3)))

为了在图例中获得点和线条,可以采用以下方法:添加geom_point(size=0)以确保点是不可见的,并在guides()中设置linetype=0以移除线条,设置size=3以获得更大的点。

ggplot(iris,aes(Petal.Width,Petal.Length,color=Species))+geom_line()+theme_bw()+
       geom_point(size=0)+
       guides(colour = guide_legend(override.aes = list(size=3,linetype=0)))

输入图像说明


太棒了,谢谢!这正是我需要的!有可能回答我的第二个问题吗? - baltazar
4
可以将这个设置放在主题中吗? - nate
2
自ggplot v3.4.0以来,size参数必须被linewidth替换,因此在版本ggplot >= 3.4.0中,应该是:r ggplot(iris,aes(Petal.Width,Petal.Length,color=Species)) + geom_line() + theme_bw() + geom_point(linewidth=0) + guides(colour = guide_legend(override.aes=list(linewith=3,linetype=0))) - Mathduff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接