在ggplot中添加图例覆盖密度图

时间:2018-06-18 03:06:31

标签: r ggplot2 legend density-plot

我有两个数据集的叠加密度图,用ggplot2创建。

  g <- ggplot(data = result_A,
              aes(x = log(cap_universal))) +
    geom_density(fill = "lightblue") +
    geom_density(data = result_B,
                 fill = "purple",
                 alpha = 0.25) +
    xlab("Complete Automation Probability") +
    ylab("Density")

我得到了我想要的东西,情节看起来像这样: enter image description here

然而,我尝试了很多方法,但仍然无法在这个情节中添加传说。没有错误消息,但传说只是赢了。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

将您的数据集result_Aresult_B合并到一个数据集中,其中这些差异的内容被指定为某个因素,例如: &#34;东西&#34;:

result_A$thing <- "A"
result_B$thing <- "B"
result_AB <- rbind(result_A, result_B)

然后,不是通过单独调用geom_density来调用两个数据集,而是使用fill = thing指定一次并手动指定颜色和字母,例如:

ggplot(data = result_AB, aes(x = log(cap_universal))) + 
  geom_density(aes(fill = thing,
                   alpha = thing)) +
  scale_fill_manual(values = c("light blue", "purple")) +
  scale_alpha_manual(values = c(1, 0.25)) +
  # assuming here that the "result_A" data will plot first as "A" should
  # order before "B" in factors, though can't test w/out yr data
  xlab("Complete Automation Probability") +
  ylab("Density")

这应该会产生一个图例,显示你的因素是什么颜色&#34; A&#34;和&#34; B&#34;是的,我认为是你所追求的。

这更符合ggplot2的哲学。但是,如果您在fill内包含aes个来电,也可能会有效,例如geom_density(aes(fill = "lightblue"))。 (虽然不可能对此进行测试,因为上面没有一个可重现的例子)