20

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

ggplot(iris) + geom_density(aes(x=Sepal.Width, colour=Species))

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

4

4 回答 4

26

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

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

如果您还需要整个区域(所有线条),那么您可以结合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")

在此处输入图像描述

于 2013-07-06T19:09:04.163 回答
7

@liesb 在答案中使用的show_guide函数在 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)))
于 2018-08-20T16:06:06.747 回答
3
ggplot(iris) + 
  stat_density(aes(x=Sepal.Width, colour=Species),
                  geom="line",position="identity")

会想要你想要的。

于 2020-01-08T18:41:52.250 回答
1

您可以通过两次绘制线条

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", size = 0) + 
guides(colour = guide_legend(override.aes=list(size=1)))

ps:很抱歉没有评论明显正确的答案——缺乏代表问题:)

pps:我意识到线程已经很老了,但它今天帮助了我,所以它可能会在某个时候帮助别人......

于 2015-02-05T20:24:13.383 回答