在scale_color_gradient2(ggplot2)中添加图例的最大值

时间:2015-11-20 20:56:58

标签: r ggplot2 legend

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

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

enter image description here

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

> max(v)
[1] 195

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

2 个答案:

答案 0 :(得分: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))

enter image description here

感谢@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)))

enter image description here

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

答案 1 :(得分:1)

我认为我可以基于“ 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,以确定所需的中断次数。根据您的数据,您可能需要调整limits参数。