【问题标题】:Add maximum value of legend in scale_color_gradient2 (ggplot2)在 scale_color_gradient2 (ggplot2) 中添加图例的最大值
【发布时间】:2016-02-23 11:41:57
【问题描述】:

我想在以下代码的图例中添加最大值

library(reshape2)
library(ggplot2)    
v <- melt(volcano)
ggplot(v, aes(x=Var1, y=Var2, fill=value)) + 
  geom_tile() + 
  scale_fill_gradient2(low = "#0000FF", mid = "#FFFFFF", high ="#FF0000", 
                       midpoint = median(v$value), space = "rgb", guide = "colourbar")

在图例中显示的最大值为 175,但数据中的最大值为 195。

> max(v)
[1] 195

那么如何在图例中的 175 顶部显示 195?

【问题讨论】:

  • 可以添加自定义范围breaks=seq(95,195,10)
  • @Vova 谢谢。但我正在寻找通用解决方案,我很多人都不知道每次的最大值。
  • 你为什么不能max(v$value)
  • 你可以试试minmax,比如breaks=seq(min(v$value),max(v$value),10)。但是,最大值将取决于最小值和步长。如果您设置breaks=c(min(v$value),max(v$value)),它将仅显示最小值和最大值。
  • @Vova breaks=c(min(v$value),max(v$value)) 有效,但中间不显示任何刻度。而 'breaks=seq(min(v$value),max(v$value),10)' 不起作用,并且会混淆图例。

标签: r ggplot2 legend


【解决方案1】:

解决方案是设置图例中断手动计算最小值和最大值。例如

v <- melt(volcano)
ggplot(v, aes(x=Var1, y=Var2, fill=value)) + 
     geom_tile() + 
     scale_fill_gradient2(low = "#0000FF", mid = "#FFFFFF", high ="#FF0000", 
                          midpoint = median(v$value), space = "rgb", 
                          guide = "colourbar",
                          breaks=seq(min(v$value),max(v$value),
                                    (max(v$value)-min(v$value))/4))

感谢@Vova 和@Sameer Chavan 提供线索。

编辑:

为了更简洁,将ceiling 添加到seq

   v <- melt(volcano)
    ggplot(v, aes(x=Var1, y=Var2, fill=value)) + 
         geom_tile() + 
         scale_fill_gradient2(low = "#0000FF", mid = "#FFFFFF", high ="#FF0000", 
                              midpoint = median(v$value), space = "rgb", 
                              guide = "colourbar",
                              breaks=ceiling(seq(min(v$value),max(v$value),
                                        (max(v$value)-min(v$value))/4)))

欢迎任何其他通用解决方案。

【讨论】:

    【解决方案2】:

    我想我可以根据“scales”包中的基本“pretty”和“pretty_breaks()”提供一个替代答案。

    根据上面的数据和示例构建...尝试使用以下内容:

    scale_fill_gradient2(low = "#0000FF", mid = "#FFFFFF", high ="#FF0000",                              
                              midpoint = median(v$value), space = "rgb", 
                              guide = "colourbar",
                              limits = c(min(v$value), max(v$value)),
                              breaks=pretty_breaks(n=4)(min(v$value):max(v$value)))
    

    您还可以将数值传递给 pretty_breaks 以确定您想要多少次休息。根据您的数据,您可能需要调整限制参数。

    【讨论】:

      猜你喜欢
      • 2018-01-02
      • 1970-01-01
      • 2020-12-03
      • 1970-01-01
      • 2021-01-14
      • 2014-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多