如何修改Highcharter R choropleth地图颜色?常规方法无效求助
解决Highcharter分级着色地图颜色不生效的问题
嘿,我太懂你这种头疼的感觉了——用Highcharter画分级着色地图时,常规改颜色的方法完全不管用,明明代码看起来没问题就是不生效!其实核心原因很简单:分级着色地图的颜色是由colorAxis(颜色轴)控制的,而不是普通series的color参数,你之前用的hc_plotOptions(series = list(color = "#C5C889"))根本不对路~
为啥你的代码失效?
你尝试的series.color参数,对于普通图表系列(比如折线、柱状)是有效的,但分级着色地图属于特殊的地图系列,它的颜色是根据数据值自动映射到颜色轴的区间里,单一的系列颜色设置会被颜色轴的规则覆盖,所以完全起不了作用。
直接上解决方案
针对你的代码,我给你两种实用的修改方式,选哪种看你需求:
方式1:自定义渐变/多色的颜色区间
如果你想让颜色根据数值从浅到深(或者自定义多个颜色段)渐变,直接用hc_colorAxis来配置就行:
mp <- highchart() %>% hc_add_series_map(usgeojson, Kaiser_insurance_coverage_2016, name = "Female", value = "Female", joinBy = c("woename", "Location")) %>% # 重点在这里!配置颜色轴的颜色映射 hc_colorAxis( minColor = "#E6F2E6", # 数值最小的区域用浅绿 maxColor = "#2E8B57", # 数值最大的区域用深绿 # 要是你想指定固定的几个颜色区间,就用colors参数 # colors = c("#C5C889", "#AAB069", "#8B9249", "#6C7429") ) %>% hc_legend(valueDecimals = 0, valueSuffix = "%", verticalAlign = "top")
方式2:给特定数值区间分配固定颜色
如果你想给不同数值范围的区域指定明确的颜色(比如0-50%用浅黄,50-70%用中黄,70-100%用深黄),就用dataClasses来定义:
mp <- highchart() %>% hc_add_series_map(usgeojson, Kaiser_insurance_coverage_2016, name = "Female", value = "Female", joinBy = c("woename", "Location")) %>% hc_colorAxis( dataClasses = list( list(from = 0, to = 50, color = "#C5C889"), list(from = 50, to = 70, color = "#AAB069"), list(from = 70, to = 100, color = "#8B9249") ) ) %>% hc_legend(valueDecimals = 0, valueSuffix = "%", verticalAlign = "top")
补充:你提到的hcmap函数怎么改?
你另一段没写完的hcmap代码,道理也是一样的——别想着用普通color参数,加个hc_colorAxis就行:
hcmap("custom/world-eckert3-highres", data = mpw, value = "your_value_column", joinBy = c("iso-a3", "country_code")) %>% hc_colorAxis(colors = c("#C5C889", "#8B9249", "#5C6419")) %>% hc_legend(valueDecimals = 0, valueSuffix = "%")
额外小技巧:想让所有区域同色?
要是你根本不需要分级,就想让所有地图区域用同一个颜色,那得同时做两步:在hc_add_series_map里指定color,然后关闭颜色轴:
mp <- highchart() %>% hc_add_series_map(usgeojson, Kaiser_insurance_coverage_2016, name = "Female", value = "Female", joinBy = c("woename", "Location"), color = "#C5C889") %>% hc_colorAxis(enabled = FALSE) %>% # 关闭颜色轴,强制用单一颜色 hc_legend(valueDecimals = 0, valueSuffix = "%", verticalAlign = "top")
这样改完,颜色肯定能生效啦!
内容的提问来源于stack exchange,提问作者MPC24
相关产品推荐
相关产品推荐

