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

2hh7jdfx  于 2023-11-14  发布在  其他
关注(0)|答案(5)|浏览(145)

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

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

字符串
颜色图例(对于每个物种值)显示为一个带有一条线的框,但绘制的密度是一条线。是否有方法使图例显示为每个物种条目的彩色线,而不是一个带有一条线的框?

dhxwm5r4

dhxwm5r41#

一种可能性是使用stat_density()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")


的数据

djp7away

djp7away2#

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

字符串

vwhgwdsa

vwhgwdsa3#

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

字符串
会想要你想要的。

332nm8kg

332nm8kg4#

你可以通过两次绘制这些线,

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:我意识到线程是相当旧,但它帮助了我今天,所以它可能会帮助别人的某个时候.

fxnxkyjh

fxnxkyjh5#

如果你想填充图例中的框,在geom_density中添加fill,但使用alpha=0并将图例覆盖为alpha=1。像这样:

ggplot(iris) + 
  geom_density(aes(x=Sepal.Width, colour=Species, fill = Species), alpha = 0) +
  guides(colour = guide_legend(override.aes = list(alpha = 1)))

字符串

相关问题