【问题标题】:adding legend to overlaying density plot in ggplot在ggplot中为覆盖密度图添加图例
【发布时间】:2018-11-26 20:56:46
【问题描述】:

我有一个来自两个数据集的叠加密度图,是用 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")

我得到了我想要的,情节是这样的:

但是,我尝试了很多方法,但仍然无法为这个情节添加图例。没有错误消息,但图例不会显示。

感谢您的帮助。

【问题讨论】:

  • 您尝试过theme 函数及其各种参数吗?您可能需要参考此文档:sthda.com/english/wiki/…
  • @user6606453,你见过这个post 我认为它与你的数据集有关。您可以输入您的数据吗?

标签: r ggplot2 legend density-plot


【解决方案1】:

将您的数据集 result_Aresult_B 组合成一个数据集,其中这些差异被指定为某个因素,例如“东西”:

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

然后,不要分别调用 geom_density 来调用两个数据集,而是使用 fill = thing 指定一次并手动指定颜色和 alpha,例如:

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

这应该会产生一个图例,显示您的因子“A”和“B”是什么颜色,我认为这就是您所追求的。

这更符合ggplot2 的理念。但是,如果您将两个 fill 调用都包装在 aes 中,它也可能会起作用,例如geom_density(aes(fill = "lightblue"))。 (虽然无法对此进行测试,因为上面没有可重现的示例)

【讨论】:

  • 感谢您将两个数据集合二为一的想法。但我试图创建一个覆盖密度图来展示这两个数据集之间的差异。
  • 我已经修改了答案,希望它能更好地“覆盖”到其他数据集上。这就是你所追求的吗?请注意您的 result_A 将首先订购的假设。如果结果错误,您可能需要切换因子水平。
  • 非常感谢@Mob。这确实很有帮助!
猜你喜欢
  • 1970-01-01
  • 2015-11-08
  • 1970-01-01
  • 2018-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-19
  • 2014-03-01
相关资源
最近更新 更多