摘要:我想为 ggplot2() 密度分布图选择颜色,而不会丢失自动生成的图例。
详细信息:我有一个使用以下代码创建的数据框(我意识到它并不优雅,但我只是在学习 R):
cands<-scan("human.i.cands.degnums")
non<-scan("human.i.non.degnums")
df<-data.frame(grp=factor(c(rep("1. Candidates", each=length(cands)),
rep("2. NonCands",each=length(non)))), val=c(cands,non))
然后我像这样绘制它们的密度分布:
library(ggplot2)
ggplot(df, aes(x=val,color=grp)) + geom_density()
这会产生以下输出:
我想选择线条出现的颜色,但我一生都无法弄清楚如何。我已经阅读了该网站上的各种其他帖子,但无济于事。最相关的是:
搜索了一段时间后,我尝试了:
## This one gives an error
ggplot(df, aes(x=val,colour=c("red","blue"))) + geom_density()
Error: Aesthetics must either be length one, or the same length as the dataProblems:c("red", "blue")
## This one produces a single, black line
ggplot(df, aes(x=val),colour=c("red","green")) + geom_density()
我想出的最好的是:
ggplot() + geom_density(aes(x=cands),colour="blue") + geom_density(aes(x=non),colour="red")
正如您在上图中看到的,最后一个命令正确地更改了线条的颜色,但它删除了图例。我喜欢ggplot2的图例系统。它既好又简单,我不想费心去重新创建 ggplot 显然能够做的事情。最重要的是,语法非常难看。我的实际数据框由 7 组不同的数据组成。我不敢相信写+ geom_density(aes(x=FOO),colour="BAR")
7 次是最优雅的编码方式。
所以,如果一切都失败了,我会接受一个答案,告诉我如何让传说回到第二个情节。但是,如果有人能告诉我如何正确地做到这一点,我会很高兴。