如何反转choroplethr分级统计图的颜色渐变方向?
解决choroplethr分级统计图颜色渐变反转问题
我已使用choroplethr包成功绘制了分级统计图,当前颜色渐变规则为低值(负数)显示红色、高值显示蓝色。由于业务场景中低值代表良好情况、高值代表不良情况,我希望将颜色渐变方向反转,实现低值(负数)显示蓝色、高值显示红色。
数据
df1 <- structure(list(region = c(6001L, 6003L, 6005L, 6007L, 6009L, 6011L, 6013L, 6015L, 6017L, 6019L, 6021L, 6023L, 6025L, 6027L, 6029L, 6031L, 6033L, 6035L, 6037L, 6039L, 6041L, 6043L, 6045L, 6047L, 6049L, 6051L, 6053L, 6055L, 6057L, 6059L, 6061L, 6063L, 6065L, 6067L, 6069L, 6071L, 6073L, 6075L, 6077L, 6079L, 6081L, 6083L, 6085L, 6087L, 6089L, 6091L, 6093L, 6095L, 6097L, 6099L, 6101L, 6103L, 6105L, 6107L, 6109L, 6111L, 6113L, 6115L), value = c(1.6, 0, 0, 0.2, 0, 0, 0.7, 0.1, 0.1, 1.2, 0.1, 0.3, 0.1, 0.1, 1.4, 0.2, 0.3, 0, 11.8, 0.2, -0.2, 0, -0.1, 0.5, 0, 0, -0.1, 0.2, -0.2, -5, -0.3, 0.1, -1.9, 0.5, -0.1, -2.1, -2.5, -1, -0.5, -0.4, 0, 0.1, -1.8, 0, 0.3, 0, 0.2, 0.6, -0.5, 0.2, 0.2, 0.1, 0.2, 0.2, 0.2, -0.8, 0.1, 0.3)), class = "data.frame", row.names = c(NA, -58L))
现有代码
library(choroplethr) county_choropleth(df1, legend="Percent\nOver\nExpected\nBased On\nPopulation", num_colors = 0, state_zoom=c("california"))
我尝试过使用RColorBrewer以及scale_color_gradient(low = "blue", high = "red")等方法修改颜色,但均未成功,恳请提供可行的解决方案。
解决方案
county_choropleth()返回的是ggplot对象,地图区域的颜色是**填充色(fill)**而非线条/点颜色(color),所以之前用scale_color_gradient()无效,需要改用填充色的渐变映射函数:
方法1:基础渐变反转
直接在原有代码后添加scale_fill_gradient(),指定低值为蓝色、高值为红色:
library(choroplethr) county_choropleth(df1, legend="Percent\nOver\nExpected\nBased On\nPopulation", num_colors = 0, state_zoom=c("california")) + scale_fill_gradient(low = "blue", high = "red", na.value = "grey50")
na.value用于指定缺失值的显示颜色,可根据需求调整。
方法2:带中点的渐变(更适合正负值区分)
如果需要明确区分正负区间,可以用scale_fill_gradient2()指定中点(比如0值)的颜色:
library(choroplethr) county_choropleth(df1, legend="Percent\nOver\nExpected\nBased On\nPopulation", num_colors = 0, state_zoom=c("california")) + scale_fill_gradient2(low = "blue", mid = "white", high = "red", midpoint = 0)
这样0值区域会显示白色,正负值的颜色区分更直观。
内容的提问来源于stack exchange,提问作者Woodstock
相关产品推荐
相关产品推荐

