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

问题描述 投票:0回答:1

我正在用 ggplot2 绘制线条,如下所示:

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

current plot

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

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

thick plot lines

但我只想看到图例中的粗线,我希望绘图上的线变细。我尝试使用

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

big legend keys

我也尝试过使用积分:

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

但当然它仍然影响情节和传说:

points

我想使用线条作为绘图,使用点/点作为图例。

所以我问两件事:

  1. 如何在不改变绘图的情况下改变图例中的线宽?
  2. 如何在图中画线,但在图例中画点/点/方块?
r plot ggplot2 legend
1个回答
118
投票

要仅更改图例中的线宽,您应该使用函数

guides()
,然后对于
colour =
,使用
guide_legend()
override.aes =
并设置
linewidth =
。这将覆盖绘图中使用的大小,并将仅对图例使用新的大小值。

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

enter image description here

要获取图例中的点和绘图中的线条,解决方法将添加

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

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.