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

如何在R中重构Treemap树状图,清晰展示geo、dataset及perc数值

解决treemap树状图标签混乱及多字段显示问题

问题说明

使用treemap包绘制树状图时,出现标签重叠混乱、无法显示perc数值的情况,需求为每个树状图方块同时展示geo地区名、dataset数据集名以及对应的perc数值。

数据集

fd=structure(list(geo = c("FR", "ID", "KE", "NG", "TH", "BD", "BF", 
"GB", "ID", "US", "DE", "FR", "GB", "US", "ZA", "BR", "DE", "GB", 
"IN", "US", "GB", "KR", "TR", "US", "UZ", "AU", "CA", "CI", "SN", 
"TH", "DE", "FR", "GB", "ID", "US", "DE", "GB", "SA", "TH", "US"
), total_gross = c(74800.179198648, 206351.720296498, 87104.011204479, 
230279.098284536, 88416.123570242, 30649.923307, 1797.704424, 
7203.416263, 20182.697799371, 1248.065576, 3884.255650215, 4312.951986, 
7590.300395, 6124.868841, 5223.464131, 8579.658550893, 5105.435153999, 
7041.527072472, 28142.360652436, 34010.800759784, 2274.429363, 
1032.775403, 3611.359533, 27850.021229, 21428.923638, 3428.672326, 
1596.969545249, 3506.142073, 1137.637902, 1932.374443, 7028.91663786, 
9778.256711419, 6271.898612455, 5442.656310329, 47786.935549483, 
46615.8912281, 34268.94122415, 20576.448612643, 20973.696070114, 
288397.397156119), dataset = c("data0_50", "data0_50", "data0_50", 
"data0_50", "data0_50", "data10001_50000", "data10001_50000", 
"data10001_50000", "data10001_50000", "data10001_50000", "data1001_5000", 
"data1001_5000", "data1001_5000", "data1001_5000", "data1001_5000", 
"data101_500", "data101_500", "data101_500", "data101_500", "data101_500", 
"data50001", "data50001", "data50001", "data50001", "data50001", 
"data5001_10000", "data5001_10000", "data5001_10000", "data5001_10000", 
"data5001_10000", "data501_1000", "data501_1000", "data501_1000", 
"data501_1000", "data501_1000", "data51_100", "data51_100", "data51_100", 
"data51_100", "data51_100"), perc = c(4L, 8L, 18L, 14L, 5L, 3L, 
4L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 
1L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 2L, 2L, 3L, 
1L, 2L)), class = "data.frame", row.names = c(NA, -40L))

解决方案代码

# 加载treemap包
if (!require(treemap)) {
  install.packages("treemap")
  library(treemap)
}

# 数据处理:聚合后过滤掉perc为0的行,避免无效小方块干扰标签
treemap_data <- aggregate(perc ~ geo + dataset, data = fd, sum)
treemap_data <- treemap_data[treemap_data$perc > 0, ]

# 自定义标签:拼接geo、dataset、perc为多行文本
treemap_data$label <- paste0(treemap_data$geo, "\n", treemap_data$dataset, "\nperc: ", treemap_data$perc)

# 绘制树状图并保存
png("treemap.png", width = 3200, height = 2400, res = 300)
treemap(
  treemap_data,
  index = c("geo", "dataset"),
  vSize = "perc",
  vColor = "perc",
  label = "label",          # 使用自定义的多行标签
  fontsize.labels = 12,     # 调整标签字体大小适配方块
  fontcolor.labels = "black",
  align.labels = list(c("center", "center")), # 标签居中显示
  overlap.labels = 0.5,     # 允许少量重叠,防止标签被强制隐藏
  inflate.labels = FALSE    # 不放大标签,保持合适比例
)
dev.off()

关键调整说明

  • 过滤无效数据:移除perc=0的行,这类方块无实际展示价值,还会导致标签拥挤混乱。
  • 自定义多行标签:用paste0拼接三个字段,通过\n实现换行,让每个方块内清晰展示全部所需信息。
  • 标签参数优化:设置标签居中、调整字体大小、控制重叠程度,确保标签清晰可见且布局合理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:55:54