【问题标题】:How to fix 'continuous value supplied to discrete scale' in with scale_color_brewer如何使用 scale_color_brewer 修复“提供给离散比例的连续值”
【发布时间】:2019-11-28 20:14:12
【问题描述】:

我正在尝试制作全球数据异常(沉淀、温度等)的地图,并且需要使用不同的调色板。我的代码与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 用这么多颜色返回你要求的调色板

【问题讨论】:

    标签: r ggplot2 colors colorbrewer


    【解决方案1】:

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

    请参阅this documentation 并改用scale_colour_gradient()

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2023-03-06
        • 2019-12-18
        • 2014-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-27
        • 2015-11-09
        • 2018-06-20
        相关资源
        最近更新 更多