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

如何将Plotly Express堆叠条形图嵌入子图并按Species区分堆叠项

Plotly子图嵌入px条形图及堆叠颜色匹配解决方案

使用px.data.iris()数据集,通过Plotly Express可以快速生成按species列区分颜色的堆叠条形图,但无法直接将该图表嵌入到make_subplots创建的复合子图中;尝试用Plotly Graph Objects实现时,无法正确按species区分堆叠项颜色,堆叠效果不符合预期。以下是两种可行的解决方法:

方案1:提取Plotly Express生成的图表轨迹(Trace)嵌入子图

Plotly Express生成的图表对象(fig)中包含了所有已配置好的轨迹(fig.data),只需将这些轨迹逐个添加到复合子图中,即可完整保留原有的颜色映射、堆叠逻辑。

示例代码:

import plotly.express as px
from plotly.subplots import make_subplots

# 预处理数据并生成px条形图
df = px.data.iris()
df = df[["sepal_width", "sepal_length", "species"]]
df = df[(df["sepal_width"] > 2.7) & (df["sepal_width"] < 3.3)]
px_fig = px.bar(df, x="sepal_width", y="sepal_length", color="species")

# 初始化复合子图
bigFig = make_subplots(
    rows=2, cols=2,
    specs = [
        [{"type": "pie"}, {"type": "pie"}],
        [{"type": "bar"}, {"type": "bar"}],
    ],
    subplot_titles=("pie1", "pie2", "bar1", "bar2")
)

# 将px生成的所有轨迹添加到指定子图位置
for trace in px_fig.data:
    bigFig.add_trace(trace, row=2, col=2)

# 设置子图的条形堆叠模式
bigFig.update_layout(barmode="stack")
bigFig.show()

方案2:用Plotly Graph Objects手动实现匹配效果的堆叠条形图

如果需要直接用Graph Objects构建,需按species分组,为每个类别创建独立的Bar轨迹,并指定与Plotly Express一致的颜色序列,再添加到子图中。

示例代码:

import plotly.graph_objects as go
from plotly.subplots import make_subplots
import plotly.express as px

# 预处理数据
df = px.data.iris()
df = df[["sepal_width", "sepal_length", "species"]]
df = df[(df["sepal_width"] > 2.7) & (df["sepal_width"] < 3.3)]

# 初始化复合子图
bigFig = make_subplots(
    rows=2, cols=2,
    specs = [
        [{"type": "pie"}, {"type": "pie"}],
        [{"type": "bar"}, {"type": "bar"}],
    ],
    subplot_titles=("pie1", "pie2", "bar1", "bar2")
)

# 按species分组创建Bar轨迹,使用px默认定性颜色序列
colors = px.colors.qualitative.Plotly
species_list = df["species"].unique()

for i, species in enumerate(species_list):
    species_df = df[df["species"] == species]
    trace = go.Bar(
        x=species_df["sepal_width"],
        y=species_df["sepal_length"],
        name=species,
        marker_color=colors[i]
    )
    bigFig.add_trace(trace, row=2, col=2)

# 设置堆叠模式并显示
bigFig.update_layout(barmode="stack")
bigFig.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 01:05:25