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

R语言Plotly绘制Treemap树形图仅为最低层子节点按首数字配色咨询

实现方案

我们可以通过先识别最低层级叶子节点、再对叶子节点按标签首数字做颜色映射的方式实现需求,非叶子节点会自动沿用原treemapcolorway配置的配色,具体步骤如下:


步骤1:预处理数据集,新增标识和颜色映射列

library(plotly)
library(stringr)

# 识别最低层级叶子节点:没有出现在parent列中的节点即为没有子节点的最低层级节点
df$is_leaf <- !df$label %in% df$parent

# 提取叶子节点标签开头的第一个数字
df$first_num <- ifelse(df$is_leaf, str_extract(df$label, "^\\d"), NA)

# 自定义首数字对应的配色,可根据需求自行调整色值
color_map <- c(
  "1" = "#FFB3BA", 
  "2" = "#BAFFC9", 
  "3" = "#BAE1FF", 
  "4" = "#FFFFBA", 
  "5" = "#FFD6BA", 
  "6" = "#E2BAFF", 
  "7" = "#FFB3F2", 
  "8" = "#B3FFF2", 
  "9" = "#D0D0D0" 
)

# 生成最终颜色向量:非叶子节点设为NA,沿用原有treemapcolorway配色,叶子节点使用映射颜色
df$node_color <- color_map[df$first_num]

步骤2:修改绘图代码,新增颜色参数

注意原代码中treemapcolorway的第四个色值少了#符号,下述代码已补全避免报错:

fig <- plot_ly(
    type = "treemap",
    labels = df$label,
    parents = df$parent,
    values = df$value / 1000,
    branchvalues = "total",
    texttemplate = "%{label}: %{value:.1f} TWh",
    textinfo = "label+value+percent parent+percent",
    # 新增节点颜色配置
    marker = list(
      colors = df$node_color
    )
  ) %>%
    layout(treemapcolorway = c("#FF0000", "#00A79F", "#413D3A", "#B51F1F", "#007480", "#CAC7C7"))

fig

补充说明

  • 如果需要调整不同首数字对应的配色,直接修改color_map中的色值即可
  • 若标签开头为两位及以上数字,只需将提取首数字的正则改为^\\d+,即可匹配完整开头数字序列再做映射

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:27:04