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

如何用Plotly创建各标记单独着色的3D散点图及相关问题

问题:Plotly 3D散点图实现按值着色及添加颜色条

问题背景

想要在Jupyter Notebook中用Plotly实现类似Matplotlib plt.scatter(x,y,c=z)的效果,让3D散点图每个标记按指定数值单独着色,并添加颜色条,尝试的代码如下:

cmap = matplotlib.colormaps['brg']
param = "elevation_deg"
min_value = min(vector)
max_value = max(vector)
range_ = max_value - min_value
colors = []
for value in vector:
    rgba = cmap((value-min_value)/range_)
    colors.append(f"rgb({int(255*rgba[0])},{int(255*rgba[1])},{int(255*rgba[2])})")
        
# Configure the trace.
trace = go.Scatter3d(
    x=x, 
    y=y,  
    z=z, 
    mode='markers',
    marker=dict(colors, size=10)
)

运行错误

执行代码后出现如下错误:

ValueError: dictionary update sequence element #0 has length 13; 2 is required

解决方案

错误原因

marker=dict(colors, size=10)写法错误:dict()需要接收键值对序列,你直接传入颜色列表会导致解析失败,正确做法是将颜色列表赋值给marker字典的color键;更简便的方式是直接利用Plotly内置的颜色映射功能,无需手动转换RGB值。


方法1:简化实现(推荐)

直接用Plotly内置功能,无需依赖Matplotlib,自动生成颜色条:

import plotly.graph_objects as go

# 假设x、y、z、vector为对应数值数组
trace = go.Scatter3d(
    x=x, 
    y=y,  
    z=z, 
    mode='markers',
    marker=dict(
        size=10,
        color=vector,  # 传入用于着色的数值数组
        colorscale='BrBG',  # 对应Matplotlib的brg色卡,Plotly命名为BrBG
        colorbar=dict(title='elevation_deg')  # 配置颜色条标题,替代plt.colorbar()
    )
)

# 生成并展示图表
fig = go.Figure(data=[trace])
fig.show()

方法2:修复原代码

如果坚持用Matplotlib的色卡,需修正marker的参数写法:

import matplotlib.pyplot as plt
import plotly.graph_objects as go

cmap = plt.colormaps['brg']
param = "elevation_deg"
min_value = min(vector)
max_value = max(vector)
range_ = max_value - min_value
colors = []
for value in vector:
    rgba = cmap((value - min_value)/range_)
    colors.append(f"rgb({int(255*rgba[0])},{int(255*rgba[1])},{int(255*rgba[2])})")
        
# 修正marker参数结构
trace = go.Scatter3d(
    x=x, 
    y=y,  
    z=z, 
    mode='markers',
    marker=dict(
        size=10,
        color=colors  # 将颜色列表赋值给color键
    )
)

# 注意:手动生成RGB的方式无法自动生成颜色条,如需颜色条建议用方法1
fig = go.Figure(data=[trace])
fig.show()

关键说明

  • Plotly的色卡命名与Matplotlib略有差异,比如Matplotlib的brg对应Plotly的BrBG,直接使用内置色卡名称即可,无需手动转换颜色值。
  • 方法1中通过colorbar参数可直接配置颜色条的标题、位置等属性,完全替代Matplotlib的plt.colorbar()功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 16:22:50