如何在tmap制作的choropleth分级统计图中对整数分段取整
实现整数分段取整的两种方案
方案1:手动指定分级断点(推荐,分段逻辑和显示完全一致)
你当前使用的style="equal"是tmap自动生成等距分段,自动计算的断点大概率不是整千整数。你可以先根据数据范围自定义符合要求的整千断点,再传入绘图函数,从根源上保证分段符合预期。
完整修改代码如下:
label <- labels_rec %>% filter(VAR == sgf_var & TABLEAU == tab) # 新增:计算整千等距断点,步长可按需调整 min_val <- floor(min(sgf_polyg$V137, na.rm = TRUE)) %/% 1000 * 1000 max_val <- ceiling(max(sgf_polyg$V137, na.rm = TRUE)) %/% 1000 * 1000 custom_breaks <- seq(min_val, max_val, by = 3000) # 步长3000对应你示例的间隔 map <- tm_shape(sgf_polyg) + tm_polygons(col = "V137", breaks = custom_breaks, # 替换原有的style="equal"参数 title="sgf_var", textNA = "Valeur manquante", legend.hist = TRUE, legend.format=list(fun=function(x) formatC(x, digits=0, format="f"), text.separator= " 到 ")) + # 把分隔符改成你需要的“到” tm_borders("#9E9E9E") + tm_layout(main.title = label$LIBELLE, main.title.size = 0.5,legend.outside = TRUE, legend.title.size = 0.7, legend.hist.width = 1)
如果需要调整取整粒度(比如精确到百位)或者分段步长,修改对应计算逻辑里的数值即可。
方案2:仅修改标签显示的取整逻辑
如果你不想改动原有自动分段的逻辑,只需要把显示的标签做取整处理,仅修改legend.format内的自定义函数即可:
legend.format=list(fun=function(x) { # 先把断点取整到1000的倍数,可按需调整取整粒度 rounded_break <- round(x / 1000) * 1000 formatC(rounded_break, digits=0, format="f") }, text.separator= " 到 ")
内容的提问来源于stack exchange,提问作者Wilcar
相关产品推荐
相关产品推荐

