手动添加的图例不在ggplot2中工作?

时间:2015-07-02 17:01:43

标签: r ggplot2 legend

这是我的数据的传真:

d1 <- data.frame(
  e=rnorm(3000,10,10)
)
d2 <- data.frame(
  e=rnorm(2000,30,30)
)

因此,通过这样做,我解决了在同一图表上绘制来自两个非常不同的数据集的两个不同密度分布的问题:

ggplot() +
  geom_density(aes(x=e),fill="red",data=d1) +
  geom_density(aes(x=e),fill="blue",data=d2) 

但是当我尝试手动添加图例时,就像这样:

ggplot() +
  geom_density(aes(x=e),fill="red",data=d1) +
  geom_density(aes(x=e),fill="blue",data=d2) +
  scale_fill_manual(name="Data", values = c("XXXXX" = "red","YYYYY" = "blue"))

什么都没发生。有人知道出了什么问题吗?我认为如果需要,我实际上可以手动添加图例。

1 个答案:

答案 0 :(得分:1)

通常,当您的数据采用单data.frame和长格式时,ggplot效果最佳。因此,在您的情况下,我们希望合并来自data.frame的数据。对于这个简单的例子,我们只是将数据连接成一个名为d的长变量,并使用一个额外的列id来指示该值属于哪个数据集。

d.f <- data.frame(id = rep(c("XXXXX", "YYYYY"), c(3000, 2000)), 
                  d = c(d1$e, d2$e))

使用reshape2tidyr等软件包可以完成更复杂的数据操作。我发现this cheat sheet经常有用。然后,当我们绘制时,我们将fill映射到id,ggplot将自动获取图例。

ggplot(d.f, aes(x = d, fill = id)) +
  geom_density()

enter image description here