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

如何为Plotly px.treemap的外层方块添加中间文本?

为Plotly Treemap外层方块添加文本的可行方案

完全可行,你可以复用现有逻辑,针对所有层级(包括外层)的节点配置文本,核心是确保customdata覆盖所有节点,同时通过texttemplate控制显示内容。

  • 关键逻辑:Plotly Treemap的所有节点(无论外层还是内层)都统一存储在fig.data[0]中,因此只要customdata数组的长度与节点总数匹配,每个节点(包括外层)都会对应到自定义数据。
  • 具体步骤:
    1. 生成覆盖所有层级节点的customdata数组:根据节点的层级(可通过fig.data[0].ids获取每个节点的层级路径),计算或准备对应需要显示的文本内容。
    2. 配置texttemplate:可以直接引用%{customdata},也可结合%{label}、%{depth}等内置变量,甚至通过条件判断区分外层和内层的显示格式。

示例代码

import plotly.express as px

# 示例数据
df = px.data.tips()
fig = px.treemap(df, path=['day', 'time'], values='total_bill')

# 获取所有节点的ID,用于区分层级
node_ids = fig.data[0].ids
customdata_list = []

# 为每个节点(外层+内层)生成自定义文本
for node_id in node_ids:
    path_parts = node_id.split('>')
    if len(path_parts) == 1:
        # 外层节点:计算该日期的平均账单
        avg_bill = df[df['day'] == path_parts[0]]['total_bill'].mean()
        custom_text = f"平均账单: ${avg_bill:.2f}"
    else:
        # 内层节点:计算该日期+时段的平均账单
        avg_bill = df[(df['day'] == path_parts[0]) & (df['time'] == path_parts[1])]['total_bill'].mean()
        custom_text = f"平均账单: ${avg_bill:.2f}"
    customdata_list.append(custom_text)

# 绑定自定义数据
fig.data[0].customdata = customdata_list

# 设置文本模板,同时显示标签和自定义内容
fig.data[0].texttemplate = "%{label}<br>%{customdata}"

# 若需区分外层和内层显示格式,可使用条件表达式
# fig.data[0].texttemplate = "{%{depth} == 0 ? '【外层】' + %{label} + '<br>' + %{customdata} : '【内层】' + %{label} + '<br>' + %{customdata}}"

fig.show()

说明

  • %{depth}变量可用于判断节点层级:最外层节点的depth为0,内层节点依次递增。
  • 确保customdata_list的长度与fig.data[0].ids的长度一致,每个索引对应一个节点。

内容的提问来源于stack exchange,提问作者J Agustin Barrachina

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:22:18