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

如何为Plotly子图中的多个图表设置统一调色板?

问题描述

在2行2列的Plotly子图中展示4个图表,每个图表的条形对应相同数值类别,需要统一配色以体现数值一致性,但当前各图表配色差异较大。现有代码如下:

import plotly
from plotly.subplots import make_subplots  # 补充缺失的导入

# 创建子图布局
fig = make_subplots(rows=2, cols=2, shared_yaxes=True)

cols = plotly.colors.DEFAULT_PLOTLY_COLORS

# 添加各子图的trace
fig.add_trace(fig1['data'][0], row=1, col=1)
fig.add_trace(fig1['data'][1], row=1, col=1)
fig.add_trace(fig1['data'][2], row=1, col=1)

fig.add_trace(fig2['data'][0], row=1, col=2)
fig.add_trace(fig2['data'][1], row=1, col=2)
fig.add_trace(fig2['data'][2], row=1, col=2)

fig.add_trace(fig3['data'][0], row=2, col=1)
fig.add_trace(fig3['data'][1], row=2, col=1)
fig.add_trace(fig3['data'][2], row=2, col=1)

fig.add_trace(fig4['data'][0], row=2, col=2)
fig.add_trace(fig4['data'][1], row=2, col=2)
fig.add_trace(fig4['data'][2], row=2, col=2)
问题原因

每个独立子图(fig1/fig2/fig3/fig4)生成时会单独循环使用Plotly默认配色,当把这些trace依次添加到总子图时,颜色会按全局添加顺序重新分配,导致同一数值类别在不同子图中颜色不一致。

解决方案

手动为每个对应数值类别的trace指定固定颜色,确保同一类别在所有子图中使用相同颜色。修改后的代码如下:

import plotly
from plotly.subplots import make_subplots

# 创建子图布局
fig = make_subplots(rows=2, cols=2, shared_yaxes=True)

# 定义统一的配色方案,取Plotly默认色的前3种(对应3个数值类别)
cols = plotly.colors.DEFAULT_PLOTLY_COLORS[:3]

# 添加子图1的trace,逐个指定颜色
fig.add_trace(fig1['data'][0].update(marker_color=cols[0]), row=1, col=1)
fig.add_trace(fig1['data'][1].update(marker_color=cols[1]), row=1, col=1)
fig.add_trace(fig1['data'][2].update(marker_color=cols[2]), row=1, col=1)

# 添加子图2的trace,对应类别使用相同颜色
fig.add_trace(fig2['data'][0].update(marker_color=cols[0]), row=1, col=2)
fig.add_trace(fig2['data'][1].update(marker_color=cols[1]), row=1, col=2)
fig.add_trace(fig2['data'][2].update(marker_color=cols[2]), row=1, col=2)

# 添加子图3的trace,对应类别使用相同颜色
fig.add_trace(fig3['data'][0].update(marker_color=cols[0]), row=2, col=1)
fig.add_trace(fig3['data'][1].update(marker_color=cols[1]), row=2, col=1)
fig.add_trace(fig3['data'][2].update(marker_color=cols[2]), row=2, col=1)

# 添加子图4的trace,对应类别使用相同颜色
fig.add_trace(fig4['data'][0].update(marker_color=cols[0]), row=2, col=2)
fig.add_trace(fig4['data'][1].update(marker_color=cols[1]), row=2, col=2)
fig.add_trace(fig4['data'][2].update(marker_color=cols[2]), row=2, col=2)

# 可选:更新布局,确保图例统一(如果需要)
fig.update_layout(showlegend=True)

说明

  • 使用update(marker_color=...)方法,在添加trace时覆盖原有颜色,强制同一类别使用固定配色。
  • 如果你的数值类别数量更多,只需扩展cols列表的长度即可。
  • 若希望自定义配色,可直接替换cols为自定义颜色列表,例如cols = ['#1f77b4', '#ff7f0e', '#2ca02c']。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 05:55:31