【问题标题】:Add legend for alpha when using identity scale使用身份比例时为 alpha 添加图例
【发布时间】:2018-02-23 15:30:57
【问题描述】:

我正在构建一个有点复杂的图,并希望手动指定每个点的 alpha。我可以用scale_alpha_identity 做到这一点,到目前为止一切都很好。但现在我想为我的 alpha 比例添加一个图例。向scale_alpha_identity 添加指南似乎不起作用 - 我只是收到错误消息,即使我尝试按照文档建议添加中断和标签:http://ggplot2.tidyverse.org/reference/scale_identity.html

最小的例子:这会产生我想要的情节,但没有图例。

ggplot(data = iris) + 
  geom_point(aes(x = Sepal.Length, y = Sepal.Width, 
                 alpha = Petal.Length / max(Petal.Length))) + 
  scale_alpha_identity()

根据文档,我认为这可行,但它没有:

ggplot(data = iris) + 
  geom_point(aes(x = Sepal.Length, y = Sepal.Width, 
                 alpha = Petal.Length / max(Petal.Length))) + 
  scale_alpha_identity(breaks = c(0, 1), labels = c(0, 1), guide = 'legend')

我还尝试了许多其他变体:将 'colorbar''legend' 直接传递给 guide 参数,带和不带中断和标签,传递 guide_legendguide_colorbar 而不是字符串 - 不走运,只是不同的错误信息。按照Is there a way to add a legend for ggplot's alpha? 中的建议添加虚假比例对我不起作用,因为它会覆盖我的身份比例。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    如果您在scale_alpha_identity 中设置limits,您可以通过guides 添加图例。

    ggplot(data = iris) + 
        geom_point(aes(x = Sepal.Length, y = Sepal.Width, 
                       alpha = Petal.Length / max(Petal.Length))) + 
        scale_alpha_identity(limits = c(.2, 1)) +
        guides(alpha = guide_legend() )
    

    【讨论】:

      【解决方案2】:

      根据https://github.com/tidyverse/ggplot2/issues/2112, 一种可能的解决方法是使用size 身份函数...

      ggplot(data = iris) + 
        geom_point(aes(x = Sepal.Length, y = Sepal.Width, 
                       alpha = Petal.Length / max(Petal.Length))) + 
        scale_size_identity(guide = 'legend')
      

      【讨论】:

      • 这不起作用,因为它不保留 alpha 上的身份比例。为了更清楚,请使用alpha = Petal.Length > 2。如果您重新添加 scale_alpha_identity,该指南将再次消失。
      • 啊,我明白了。对此感到抱歉。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多