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

Plotly Express时间线副轴散点图Y轴分类排序失效求助

解决思路

问题核心:用make_subplots创建的主图不会自动继承Plotly Express生成的fig_timeline中的Y轴分类顺序配置。px.timeline虽已根据category_orders设置好分类排序,但将轨迹转移到新图后,主图Y轴仍采用默认排序规则(如字母序或数据出现顺序)。

具体解决步骤

在添加完所有时间线轨迹后,手动为主图的主Y轴设置分类顺序——既可以直接复用你定义的分类列表,也可以从fig_timeline中提取已有的配置,避免重复代码。

修改后的代码示例

fig = make_subplots(shared_xaxes=True, specs=[[{"secondary_y": True}]])

fig_timeline = px.timeline(df, 
    x_start='x_start', 
    x_end='x_end', 
    y='vm_type', 
    color='bartype',
    category_orders={'vm_type':['a','b','c','d']},
    hover_name='bartype',
    )

for d in fig_timeline.data:
    fig.add_trace(d)

# 同步Y轴分类顺序到主图(主Y轴对应时间线)
fig.update_yaxes(
    categoryorder='array',
    categoryarray=['a','b','c','d'],
    secondary_y=False
)

# 若副Y轴的散点图也需自定义分类,可参考以下配置
# fig.update_yaxes(
#     categoryorder='array',
#     categoryarray=[...],  # 替换为散点图的分类列表
#     secondary_y=True
# )

更灵活的写法(复用fig_timeline的配置)

不想重复编写分类列表时,可直接从fig_timeline的布局中提取配置:

fig.update_yaxes(
    categoryorder=fig_timeline.layout.yaxis.categoryorder,
    categoryarray=fig_timeline.layout.yaxis.categoryarray,
    secondary_y=False
)

这样就能保证主图的Y轴分类顺序与单独绘制fig_timeline时完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 05:08:13