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

Python Plotly 3D曲面图自定义绿-黄-红颜色刻度报错求助

问题解决:Plotly 3D曲面图自定义分段颜色刻度

错误原因分析

你遇到的TypeError: object of type 'int' has no len(),本质是将颜色刻度(colorscale)错误配置在了布局(layout)中——Plotly的颜色刻度属于轨迹(trace)级别的配置,而非全局布局,放在update_layout里会触发参数解析错误。同时你之前的颜色映射逻辑也未匹配实际z值区间(0-13),而是用了无意义的0-1归一化值。

实现目标的修正代码

import plotly.graph_objects as go
import pandas as pd

# 模拟z_data数据(如果已有真实数据可替换)
z_data = pd.DataFrame([[i+j for j in range(14)] for i in range(14)])

fig = go.Figure(data=[go.Surface(
    z=z_data.values,
    zmin=0,  # 锁定z值下限,确保颜色映射匹配目标区间
    zmax=13, # 锁定z值上限
    # 构建分段颜色映射:严格对应0-3红、4-8黄、9-13绿
    colorscale=[
        [0, 'red'],          # z=0对应红色
        [3/13, 'red'],       # z=3仍为红色,0-3区间保持红色
        [3/13, 'yellow'],    # z超过3后切换为黄色
        [8/13, 'yellow'],    # z=8仍为黄色,4-8区间保持黄色
        [8/13, 'green'],     # z超过8后切换为绿色
        [1, 'green']         # z=13为绿色,9-13区间保持绿色
    ],
    # 配置颜色条显示对应区间说明
    colorbar=dict(
        tickvals=[1.5, 6, 11],  # 每个区间的中间值作为刻度点
        ticktext=['0-3 (红)', '4-8 (黄)', '9-13 (绿)'],
        title='Z值区间'
    )
)])

fig.update_layout(
    title='Knochehöhe',
    font_size=8,
    scene=dict(xaxis_title="Y", yaxis_title="X"),
    width=1000,
    height=1000
)

fig.update_traces(
    contours_z=dict(show=True, usecolormap=True,
                    highlightcolor="limegreen", project_z=True)
)
fig.layout.template = "none"

fig.show()

关键配置说明

  1. 颜色刻度归属:将colorscale直接放在go.Surface的参数中,这是Plotly轨迹级颜色配置的正确位置。
  2. 分段颜色逻辑:
    • 基于z值的实际范围(0-13),将每个区间的起始/结束值转换为归一化值(实际值/13)。
    • 通过在区间的起始和结束点设置相同颜色,实现区间内颜色完全一致的效果。
  3. 颜色条优化:通过colorbar的tickvals和ticktext,让颜色条直观展示每个区间对应的z值范围和颜色。
  4. z范围锁定:设置zmin和zmax确保颜色映射严格匹配目标区间,避免因z数据实际范围波动导致颜色偏移。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:55:50