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

Plotly px.ecdf带边际图子图并排绘制报错及解决方案咨询

Plotly Express ECDF图并排绘制解决方案

报错原因说明

你遇到的报错是因为px.ecdf()返回的是完整的Figure对象,而make_subplots的add_trace()方法仅接受单个graph_objects类型的Trace实例,二者类型不匹配导致报错。

可行方案

方案1:使用Facet分面(最简方案,适合数据同源场景)

Plotly Express的ECDF原生支持分面参数,无需手动处理子图逻辑,可自动保留边际图、交互能力和样式。如果你的多个ECDF数据可整合到同一个DataFrame中,优先选这个方案:

import plotly.express as px
import pandas as pd

df = px.data.tips()
# 构造分面用的数据集,新增分组字段区分不同子图
df_facet = pd.concat([
    df.assign(group='子图1'),
    df.assign(group='子图2')
])
# 直接通过facet_col参数指定分位列,实现并排展示
fig = px.ecdf(df_facet, x="total_bill", color="sex", 
              markers=True, lines=False, marginal="histogram",
              facet_col="group")
fig.update_layout(height=600, width=800, title_text="并排ECDF图")
fig.show()

方案2:手动提取Trace添加到子图(灵活方案,适合数据异源场景)

如果多个ECDF的数据源完全独立,无法整合为同一个DataFrame做分面,可以提取px.ecdf生成的标准Trace,手动分配到子图对应位置。
如果需要保留每个子图的边际直方图,需要创建2行多列的子图网格,第一行放边际图、第二行放ECDF主图:

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

df = px.data.tips()
# 生成两个独立的ECDF图,模拟不同数据源的场景
fig1 = px.ecdf(df, x="total_bill", color="sex", markers=True, lines=False, marginal="histogram")
fig2 = px.ecdf(df, x="tip", color="sex", markers=True, lines=False, marginal="histogram")

# 创建2行2列的子图网格,同列共享X轴保证边际图和主图对齐
fig = make_subplots(rows=2, cols=2, 
                    shared_xaxes=True,
                    row_heights=[0.2, 0.8], # 边际图占20%高度,主图占80%
                    vertical_spacing=0.05,
                    column_titles=["总账单ECDF", "小费ECDF"])

# 把第一个ECDF的Trace加到第一列
for trace in fig1.data:
    if trace.type == 'histogram':
        fig.add_trace(trace, row=1, col=1)
    else:
        fig.add_trace(trace, row=2, col=1)

# 把第二个ECDF的Trace加到第二列
for trace in fig2.data:
    if trace.type == 'histogram':
        fig.add_trace(trace, row=1, col=2)
    else:
        fig.add_trace(trace, row=2, col=2)

# 全局布局调整,去重图例
fig.update_layout(height=600, width=1000, title_text="并排ECDF图(带边际直方图)",
                  showlegend=True)
fig.show()

如果不需要边际图,直接创建1行多列的子图,提取所有非histogram类型的Trace添加到对应位置即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:27:02