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

如何在Plotly行列分面图中实现每行列分面共用y轴、不同行y轴独立

Plotly分面图同行y轴共享、不同行y轴独立设置方案

核心逻辑

不需要全局取消所有y轴的匹配关系,仅需按行分组设置y轴匹配规则即可,避免全局matches=None导致同行y轴关联被清除的问题。

具体实现

固定行数场景(以2行分面为例)

直接逐行指定y轴匹配规则即可:

import plotly.express as px
# 示例分面图创建:行分面、列分面同时存在
df = px.data.tips()
fig = px.scatter(df, x="total_bill", y="tip", facet_row="time", facet_col="sex")

# 第一行所有列的y轴匹配第一行第一列的y轴
fig.update_yaxes(matches="y", row=1)
# 第二行所有列的y轴匹配第二行第一列的y轴,和第一行无关联
fig.update_yaxes(matches="y2", row=2)

fig.show()

如果是用make_subplots手动创建的子图,设置规则完全一致:

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

# 创建2行3列子图
fig = make_subplots(rows=2, cols=3)
# 此处省略添加trace的业务代码

# 同样按行设置y轴匹配规则
fig.update_yaxes(matches="y", row=1)
fig.update_yaxes(matches="y2", row=2)

行数不固定通用方案

如果分面行数是动态生成的,可通过循环自动适配:

# 自动获取分面总行数
total_rows = max(fig._get_subplot_rows())

for row_idx in range(1, total_rows + 1):
    match_target = f"y{row_idx}" if row_idx > 1 else "y"
    # 逐行设置该行所有y轴匹配当前行第一个子图的y轴
    fig.update_yaxes(matches=match_target, row=row_idx)

实现效果

设置完成后,同一行内所有列分面的y轴量程完全一致,可正常进行横向对比;不同行的y轴会独立适配对应行的数据范围,不会互相干扰。
之前出现问题是因为全局调用fig.update_yaxes(matches=None)清除了所有y轴的匹配关联,导致同行、跨行的y轴都完全独立,按上述方案按行分组设置匹配规则即可解决。

问题示例图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:21:01