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

choroplethr自定义分箱问题:如何避免最低分箱自动合并?

关于choroplethr绘制分级统计图时分箱合并的问题

我正在用choroplethr绘制美国佛罗里达州人口普查区级别的某健康指标率分级统计图。程序能正常运行,但修改分箱规则后,生成的地图里最低分箱被合并了!我参考了手动设置分箱断点的方法,自己写了分箱代码,但就是解决不了这个问题。想问问能不能指定choroplethr不执行这个合并操作?另外,num_colors命令是不是解决这个问题的最佳选择?

注:暂时没法提供可复现示例,需要佛罗里达人口普查区FIPS代码配合随机数生成值,附我写的相关代码:

# manually label classes by given cut points
mydata2$countclass[mydata2$rate_acs ==0 ]<-0
mydata2$countclass[mydata2$rate_acs >0 & mydata2$rate_acs <32.3 ]<-1
mydata2$countclass[mydata2$rate_acs >32.3 & mydata2$rate_acs <43.2 ]<-2
mydata2$countclass[mydata2$rate_acs >43.2 & mydata2$rate_acs <55.8 ]<-3
mydata2$countclass[mydata2$rate_acs >55.8 & mydata2$rate_acs <74.3 ]<-4
mydata2$countclass[mydata2$rate_acs >74.3 ]<-5
mydata2$value = mydata2$countclass
tract_choropleth(mydata2, "florida")

问题解答

嗨,我来帮你搞定这个问题~

首先,choroplethr默认会自动合并没有数据或者分类值样本过少的分箱,这应该就是你看到最低分箱被合并的核心原因。要阻止这个自动合并行为,num_colors参数确实是最直接的解决方案!

你现在手动给数据划分了6个类别(从0到5),但默认情况下num_colors的设置没有匹配你的分类数量,所以choroplethr会自动调整合并分箱。你只需要在tract_choropleth()函数里明确指定num_colors = 6,这样它就会严格保留你所有手动划分的分箱,不会再自作主张合并了。

修改后的代码如下:

# 你的分箱逻辑保持不变
mydata2$countclass[mydata2$rate_acs ==0 ]<-0
mydata2$countclass[mydata2$rate_acs >0 & mydata2$rate_acs <32.3 ]<-1
mydata2$countclass[mydata2$rate_acs >32.3 & mydata2$rate_acs <43.2 ]<-2
mydata2$countclass[mydata2$rate_acs >43.2 & mydata2$rate_acs <55.8 ]<-3
mydata2$countclass[mydata2$rate_acs >55.8 & mydata2$rate_acs <74.3 ]<-4
mydata2$countclass[mydata2$rate_acs >74.3 ]<-5
mydata2$value = mydata2$countclass

# 关键:添加num_colors参数指定分类数量
tract_choropleth(mydata2, "florida", num_colors = 6)

另外,给你个小建议——用cut()函数代替手动逐个赋值分箱,代码会更简洁易读,还能避免手动写条件可能出现的疏漏:

# 用cut直接生成指定断点的分类
mydata2$countclass <- cut(mydata2$rate_acs, 
                          breaks = c(-Inf, 0, 32.3, 43.2, 55.8, 74.3, Inf),
                          labels = 0:5)
# 把因子转成整数赋值给value,choroplethr才能正确识别
mydata2$value <- as.integer(mydata2$countclass)

# 同样指定num_colors=6
tract_choropleth(mydata2, "florida", num_colors = 6)

最后再划个重点:

  • 要阻止分箱合并,必须让num_colors的值和你手动划分的分类数量完全一致,这是最有效的方法。
  • 用cut()替代手动赋值分箱,能减少代码冗余,降低出错概率。

内容的提问来源于stack exchange,提问作者SmilingSam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:28:51