在不影响绘图的情况下控制ggplot2图例

bal*_*zar 68 plot r legend ggplot2

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

ggplot(iris, aes(Petal.Width,Petal.Length,color=Species)) + geom_line() + theme_bw()
Run Code Online (Sandbox Code Playgroud)

目前的情节.

我发现传奇标记很小,所以我希望它们更大.如果我改变大小,情节上的线条也会改变:

ggplot(iris, aes(Petal.Width,Petal.Length,color=Species)) + geom_line(size=4) + theme_bw()
Run Code Online (Sandbox Code Playgroud)

厚厚的情节线条.

但是我只想在图例中看到粗线,我希望图上的线条很薄.我尝试使用,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"))
Run Code Online (Sandbox Code Playgroud)

大传奇钥匙

我也尝试过使用积分:

ggplot(iris,aes(Petal.Width,Petal.Length,color=Species)) + geom_line() + geom_point(size=4) + theme_bw()
Run Code Online (Sandbox Code Playgroud)

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

点

我想使用线条和图例的点/点.

所以我要问两件事:

  1. 如何在不改变图的情况下改变图例中的线宽?
  2. 如何在绘图中绘制线条,但在图例中绘制点/点/方块?

Did*_*rts 101

要改变线宽只有在传说中,你应该使用功能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)))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

要获取图例中的点和绘图中的线条,将添加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)))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 这可以在主题中设置吗? (3认同)
  • 从 ggplot v3.4.0 开始,“size”参数必须替换为“linewidth”,因此版本 ggplot >= 3.4.0 它将是: ```r ggplot(iris,aes(Petal.Width,Petal.Length,颜色=物种))+ geom_line()+ theme_bw()+ geom_point(大小= 0)+指南(颜色=guide_legend(override.aes =列表(linewith = 3,linetype = 0)))``` (2认同)