将图例添加到ggplot直方图中

时间:2019-12-05 17:05:53

标签: r ggplot2 legend

我用R中的ggplot绘制了向量的直方图和kde。现在,我想添加一个图例,其中包含三个kde图->“矩形”,“ epanechnikov”和“高斯”。我就是无法正常工作!

v1 = data.frame(x=rnorm(500,30,9))
ggplot(data=v1, aes(x=x)) +
  geom_histogram(binwidth=2, color="grey", fill="white") +
  geom_density(aes(y=2 * ..count..), kernel="rectangular", color="orange") + 
  geom_density(aes(y=2 * ..count..), kernel="epanechnikov", color="red") + 
  geom_density(aes(y=2 * ..count..), kernel="gaussian", color="blue") + 
  scale_color_manual(labels=c("rectangular", "epanechnikov","gaussian"),
                     values=c("orange"="orange", "red"="red", "blue"="blue"))

enter image description here

1 个答案:

答案 0 :(得分:0)

如此很亲密。根据{{​​3}}的建议:

ggplot(data=v1, aes(x=x)) +
  geom_histogram(binwidth=2, color="grey", fill="white") +
  geom_density(aes(y=2 * ..count.., color="rectangular"), kernel="rectangular") + 
  geom_density(aes(y=2 * ..count.., color="epanechnikov"), kernel="epanechnikov") + 
  geom_density(aes(y=2 * ..count.., color="gaussian"), kernel="gaussian") + 
  scale_color_manual(labels=c("rectangular", "epanechnikov","gaussian"),
                     values=c("rectangular"="orange", "epanechnikov"="red", "gaussian"="blue")) 

https://stackoverflow.com/a/24497113

诀窍是将color移到内部 aes(...),并在scale_color_manual中进行匹配。我碰巧使用了与kernel=相同的字符串,但这并不是绝对必要的。不过,无论您选择什么,都需要在values=中匹配scale_color_manual的名称。 (顺便说一句,labels=在这里是可选的,除非您要美化某些字符串;否则,它将在每个color=中使用aes()。)