如何使用scale_color_brewer修复“提供给离散比例的连续值”

Hel*_*ach 8 r colors ggplot2 colorbrewer

我正在尝试制作全球数据异常(降水、温度等)的地图,并且需要使用不同的调色板。我的代码可以很好地运行,scale_color_viridis但它不容易用scale_color_brewer. 我想使用RdBu发散的调色板。

vars我已经尝试在函数中提供值scale_color_brewer并使用scale_fillBrewer,但我想继续使用geom_points到目前为止的绘图。

  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) 
Run Code Online (Sandbox Code Playgroud)

错误信息是

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

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

Pau*_*die 6

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

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


yif*_*yan -2

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

请参阅此文档并改用scale_colour_gradient()