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

如何在Python Plotly中制作按正负值渐变着色的Treemap图表

Plotly Treemap 按正负值动态着色实现方案

核心思路

通过自定义颜色刻度(color_continuous_scale),将open_pl字段的负值映射到红色渐变系、正值映射到绿色渐变系,同时设置颜色中点为0,确保数值正负程度对应颜色深浅变化。

代码实现(Plotly Express)

import plotly.express as px
import pandas as pd

# 替换为你的业务数据
data = pd.DataFrame({
    'category': ['A', 'B', 'C', 'D', 'E', 'F'],
    'value': [10, 20, 15, 25, 30, 18],
    'open_pl': [50, -30, 20, -40, 60, -10]
})

# 自定义颜色刻度:负值从深红到浅红,正值从浅绿到深绿
color_scale = [
    [0.0, '#8B0000'],   # 最小负值(最深红)
    [0.25, '#DC143C'],  # 中等负值(浅红)
    [0.5, '#FFFFFF'],   # 0值(白色过渡)
    [0.75, '#32CD32'],  # 中等正值(浅绿)
    [1.0, '#006400']    # 最大正值(最深绿)
]

# 生成Treemap并应用着色逻辑
fig = px.treemap(
    data,
    path=['category'],
    values='value',
    color='open_pl',
    color_continuous_scale=color_scale,
    color_continuous_midpoint=0  # 强制颜色中点为0,区分正负区间
)

# 优化颜色条显示
fig.update_layout(
    coloraxis_colorbar=dict(
        title='Open P&L',
        ticks='outside',
        tickvals=[data['open_pl'].min(), 0, data['open_pl'].max()],
        ticktext=[f"{data['open_pl'].min()}", '0', f"{data['open_pl'].max()}"]
    )
)

fig.show()

无白色过渡的版本(可选)

如果不需要0值处的白色断层,可调整颜色刻度,让正负区间直接衔接:

color_scale = [
    [0.0, '#8B0000'],
    [0.49, '#FF6347'],  # 接近0的负值(浅红)
    [0.51, '#90EE90'],  # 接近0的正值(浅绿)
    [1.0, '#006400']
]

代码实现(Plotly Graph Objects)

若使用底层Graph Objects库,逻辑一致:

import plotly.graph_objects as go

fig = go.Figure(go.Treemap(
    labels=data['category'],
    parents=['']*len(data),  # 顶级节点无父类
    values=data['value'],
    marker=dict(
        colors=data['open_pl'],
        colorscale=color_scale,
        cmid=0,  # 颜色中点设为0
        colorbar=dict(
            title='Open P&L',
            tickvals=[data['open_pl'].min(), 0, data['open_pl'].max()],
            ticktext=[f"{data['open_pl'].min()}", '0', f"{data['open_pl'].max()}"]
        )
    )
))

fig.show()

关键参数说明

  • color='open_pl':指定以open_pl字段作为颜色映射的数据源
  • color_continuous_midpoint=0:将颜色刻度的中点强制设为0,确保负值和正值分别对应红色系和绿色系
  • color_continuous_scale:自定义颜色渐变规则,通过分位值(0到1)对应具体颜色,实现深浅随数值变化

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:30:21