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
相关产品推荐
相关产品推荐

