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
相关产品推荐
相关产品推荐

