如何修复使用scale_color_brewer时出现的“continuous value supplied to discrete scale”错误

8
我正在尝试制作全球数据异常(降水、温度等)的地图,并需要使用分散的颜色调色板。我有一段代码在使用“scale_color_viridis”时运行良好,但它不容易转换成“scale_color_brewer”。我想使用“RdBu”分散调色板。
我已经尝试在函数“scale_color_brewer”中提供“vars”值,并使用“scale_fill brewer”,但我希望继续使用到目前为止所拥有的“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) 

错误信息为:

错误:连续的值被提供给离散比例尺

以及

警告信息: 1:在 RColorBrewer::brewer.pal(n, pal)中: n 太大,允许 RdBu 调色板的最大值是11 返回您请求的具有那么多颜色的调色板

2个回答

6
您可以将连续值分组/粗略化,将它们转换为具有离散顺序的值,以映射到您选择的Brewer调色板中包含的8到12种离散颜色之一。
但是我认为您正在寻找的解决方案是使用ggplot2中已经包含的“distill”函数scale_color_distiller()scale_fill_distiller(),有效地将它们转换为连续的颜色比例尺。文档和示例可在一些规范位置找到:

没错,scale_*_distiller() 就是你想要的。 - gradcylinder

-2

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接