You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何反转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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 20:35:57