如何使用scale_color_brewer固定“提供给离散刻度的连续值”

时间:2019-07-19 20:15:53

标签: r ggplot2 colors colorbrewer

我正在尝试绘制全局数据异常(降水,温度等)的地图,并且需要使用不同的调色板。我的代码可以与scale_color_viridis一起很好地运行,但是不能轻易地与scale_color_brewer一起转换。我想使用RdBu分散调色板。

我尝试在函数vars中提供值scale_color_brewer并使用scale_fill brewer,但我想继续使用到目前为止的geom_points进行绘图。 / p>

  titletext <- paste(VAR, "Response")
  expand.grid(lon, lat) %>%
    rename(lon = Var1, lat = Var2) %>%
    mutate(lon = ifelse(lon > 180, -(360 - lon), lon),
           vars = as.vector(global.array)) %>% 
    ggplot() + 
    geom_point(aes(x = lon, y = lat, color = vars),
               size = 2.0) + 
    borders("world", colour="black", fill=NA) + 
    scale_color_brewer(type="div", palette="RdBu")+
    #scale_color_viridis(na.value="white",name = VAR) +  
    theme(legend.direction="vertical", legend.position="right", 
          legend.key.width=unit(0.4,"cm"), legend.key.heigh=unit(2,"cm")) + 
    coord_quickmap() + ggtitle(titletext) 

错误消息是

  

错误:连续值提供给离散刻度

  

警告消息:   1:在RColorBrewer :: brewer.pal(n,pal)中:     n太大,允许调色板RdBu的最大值为11   用多种颜色返回您要的调色板

2 个答案:

答案 0 :(得分:0)

RdBu是离散的调色板,但是您尝试将其用于连续数据。

请参阅this documentation并改用scale_colour_gradient()

答案 1 :(得分:0)

您可以对连续值进行分箱/粗粒度化,为它们提供一个离散有序的值,以映射到您选择的 Brewer 调色板中包含的离散 8 到 12 种颜色。

但我认为您正在寻找的解决方案是使用 ggplot2 中已经包含的 scale_color_distiller()scale_fill_distiller() 函数“提炼”它们,有效地将它们转换为连续的色标。在一些规范位置提供了文档和示例: