【问题标题】:How to add abline to legend together with geom_point如何将 abline 与 geom_point 一起添加到图例
【发布时间】:2017-04-14 01:33:34
【问题描述】:

我正在尝试将 abline 添加到 ggplot2 图中的图例中。但是,我无法让它工作。有人可以帮忙吗?

示例代码:

## dummy script to test legends with ablines
library(ggplot2)
df1 <- iris
plot12345 <- ggplot(data = iris) +
  geom_point(aes(x = Sepal.Length, y = Sepal.Width, colour = "dummy1")) +
  geom_abline(aes(colour = "dummy2"), intercept = -3, slope = 1) +
  scale_colour_manual(values = c("dummy1" = "blue", "dummy2" = "red"))

这仅包括图例中的第一行,但不包括第二行:

【问题讨论】:

  • 不确定它是如何工作的,但将interceptslope 放入aes 会得到你想要的:ggplot(data = iris) + geom_point(aes(x = Sepal.Length, y = Sepal.Width, colour = "dummy1")) + geom_abline(aes(slope = 1, intercept = -3, colour = "dummy2")) + scale_colour_manual(values = c("dummy1" = "blue", "dummy2" = "red"))
  • 谢谢伙计!有点奇怪,但它确实有效。是否也碰巧知道如何让图例只显示 dummy2 的线而只显示 dummy1 的点?
  • 对不起,我不知道该怎么做。
  • 好的,但是如果您可以将评论作为答案;那我就可以接受了。 :) 再次感谢。
  • 我认为这不是一个令人满意的解决方案,让我们等待其他解决方案。我会对此进行更多研究。

标签: r ggplot2 legend


【解决方案1】:
  1. 为了显示该行的图例,我们可以将interceptslope 放入aes。 (我不知道它是如何工作的,但在 Hadley 的 ggplot2 书的 page146 上有一个类似的例子);

  2. 为了让图例只显示 dummy2 的线条和 dummy1 的点,我们必须操纵 guide_legend 来覆盖默认的图例美学。 linetype = c(0, 1) 表示空白和实线。

这是最终代码:

ggplot(data = iris) +
    geom_point(aes(x = Sepal.Length, y = Sepal.Width,
                   colour = "dummy1")) +
    geom_abline(aes(colour = "dummy2", slope = 1, intercept = -3)) +
    scale_color_manual(
        values = c("dummy1" = "blue", "dummy2" = "red"),
        guide = guide_legend(
            override.aes = list(pch = c(16, NA), linetype = c(0, 1)))
    )

【讨论】:

  • 非常感谢,太好了。我不知道override.aescommand,这对伟大的风格传奇来说很棒。我找这个很久了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-25
  • 2019-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多