R语言北卡地理地图:如何突破调色板颜色数量限制?
解决R语言中YlOrRd调色板支持10个颜色区间的问题
你当前通过cut_number()将失业率变量划分为10个区间,但scale_fill_brewer()调用的YlOrRd内置调色板仅支持最多9种离散颜色,导致警告无法正常渲染10个区间的颜色。以下是三种可行的解决方案:
方法1:使用连续色阶替代离散区间
直接基于原始连续的失业率变量做颜色映射,利用scale_fill_distiller()实现YlOrRd色系的连续渐变,同时手动设置10个区间的断点,既保留渐变效果又满足区间展示需求:
library(ggplot2) ggplot() + geom_sf(data = nc, aes(fill = unemployement_rate), # 直接绑定原始连续变量 alpha = 0.8, colour = 'white', size = 0.3) + scale_fill_distiller(palette = "YlOrRd", name = "unemployement_rate", breaks = seq(0, 1, 0.1), # 设置10个等距断点 labels = scales::percent_format(accuracy = 1)) + labs(x = NULL, y = NULL, title = "Unemployement Rate in North Carolina counties") + theme(panel.background = element_blank(), line = element_blank(), axis.text = element_blank(), axis.title = element_blank()) + coord_sf(datum = NA)
方法2:用colorspace包扩展离散调色板
如果需要严格保持离散区间的展示形式,可使用colorspace包基于YlOrRd色系生成任意数量的自然过渡颜色:
library(ggplot2) library(colorspace) # 生成10种YlOrRd色系的过渡颜色 ylorrd_10 <- sequential_hcl(10, palette = "YlOrRd") ggplot() + geom_sf(data = nc, aes(fill = cut_number(unemployement_rate, 10)), alpha = 0.8, colour = 'white', size = 0.3) + scale_fill_manual(values = ylorrd_10, name = "unemployement_rate") + labs(x = NULL, y = NULL, title = "Unemployement Rate in North Carolina counties") + theme(panel.background = element_blank(), line = element_blank(), axis.text = element_blank(), axis.title = element_blank()) + coord_sf(datum = NA)
方法3:插值扩展原始调色板颜色
利用colorRampPalette()对YlOrRd的原始9种颜色进行插值,生成10种平滑过渡的颜色,适配离散区间需求:
library(ggplot2) library(RColorBrewer) # 提取YlOrRd原始9色,插值生成10种颜色 ylorrd_base <- brewer.pal(9, "YlOrRd") ylorrd_10 <- colorRampPalette(ylorrd_base)(10) ggplot() + geom_sf(data = nc, aes(fill = cut_number(unemployement_rate, 10)), alpha = 0.8, colour = 'white', size = 0.3) + scale_fill_manual(values = ylorrd_10, name = "unemployement_rate") + labs(x = NULL, y = NULL, title = "Unemployement Rate in North Carolina counties") + theme(panel.background = element_blank(), line = element_blank(), axis.text = element_blank(), axis.title = element_blank()) + coord_sf(datum = NA)
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

