在R中的ggplot2中为geom_density制作线条图例

11 plot r ggplot2

使用ggplot2,我制作以下密度图:

ggplot(iris) + geom_density(aes(x=Sepal.Width, colour=Species))
Run Code Online (Sandbox Code Playgroud)

颜色图例(对于每个Species值)显示为一个带有直线的框,但绘制的密度为一条线.有没有办法让图例只显示每个Species条目的彩色线条,而不是一个有一条线穿过它的框?

Did*_*rts 18

一种可能性是使用stat_density()geom="line".只有在这种情况下才会有上线.

  ggplot(iris)+
    stat_density(aes(x=Sepal.Width, colour=Species),
                     geom="line",position="identity")
Run Code Online (Sandbox Code Playgroud)

如果您还需要整个地区(所有行),那么你可以结合geom_density()使用show_guide=FALSE(删除图例)和stat_density()比将增加的传说只是水平线.

ggplot(iris) + 
  geom_density(aes(x=Sepal.Width, colour=Species),show_guide=FALSE)+
  stat_density(aes(x=Sepal.Width, colour=Species),
                  geom="line",position="identity")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


小智 7

show_guide@liesb 在答案中使用的函数在 ggplot 3.0.0 下已弃用;它已更改为show.legend

ggplot(iris) + 
geom_density(aes(x=Sepal.Width, colour=Species),show.legend=FALSE) +
stat_density(aes(x=Sepal.Width, colour=Species),
             geom="line",position="identity", size = 0) + 
guides(colour = guide_legend(override.aes=list(size=1)))
Run Code Online (Sandbox Code Playgroud)


小智 5

ggplot(iris) + 
  stat_density(aes(x=Sepal.Width, colour=Species),
                  geom="line",position="identity")
Run Code Online (Sandbox Code Playgroud)

会做你想要的。