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

如何让Plotly双Y轴图表的左侧Y轴刻度与右侧自动对齐?

实现Plotly双Y轴网格线自动对齐的解决方案

要解决双Y轴网格线错位的问题,核心是让左侧Y轴的刻度完全匹配右侧Y轴的网格线位置,通过数据范围比例映射的方式实现,逻辑可自动适配任意DataFrame,具体实现如下:

核心思路

  1. 分别获取左右轴数据的极值(最小值、最大值)
  2. 基于右侧Y轴的刻度位置,通过数据范围比例计算左侧Y轴对应的刻度值
  3. 手动指定左右轴的刻度和范围,强制网格线对齐

完整代码实现

import plotly.graph_objects as go
import numpy as np

# 提取左右轴对应的数据
cur_data = line_df['CUR (€)']
pp_data = line_df['CUR PP']

# 1. 计算左右轴数据的极值
left_min, left_max = cur_data.min(), cur_data.max()
right_min, right_max = pp_data.min(), pp_data.max()

# 2. 生成右侧Y轴的均匀刻度(可自定义刻度数量)
right_ticks = np.linspace(right_min, right_max, num=5)  # 生成5个均匀分布的刻度

# 3. 通过比例映射计算左侧Y轴对应的刻度值
left_ticks = left_min + (left_max - left_min) * (right_ticks - right_min) / (right_max - right_min)

# 创建图表轨迹
bar_trace = go.Bar(x=line_df['Year/Quarter'], y=cur_data, name='CUR (€)')
line_trace1 = go.Scatter(x=line_df['Year/Quarter'], y=pp_data, name='CUR PP 1', 
                         yaxis='y2', mode='lines+markers', line=dict(color='orange'))
line_trace2 = go.Scatter(x=line_df['Year/Quarter'], y=pp_data, name='CUR PP 2', 
                         yaxis='y2', mode='lines+markers', line=dict(color='red'))

# 配置布局,强制左右轴刻度对齐
layout = go.Layout(
    title='双Y轴网格线对齐示例',
    yaxis=dict(
        title='CUR (€)',
        range=[left_min, left_max],
        tickvals=left_ticks,  # 手动绑定左轴刻度
        tickformat='.2f'  # 根据需求调整小数显示位数
    ),
    yaxis2=dict(
        title='CUR PP',
        overlaying='y',
        side='right',
        range=[right_min, right_max],
        tickvals=right_ticks,  # 手动绑定右轴刻度
        tickformat='.2f'
    )
)

fig = go.Figure(data=[bar_trace, line_trace1, line_trace2], layout=layout)
fig.show()

关键说明

  • 刻度数量可通过np.linspace的num参数调整,比如改成6个刻度只需修改为num=6
  • 若数据包含异常值,可先对数据做截断处理(比如取95分位数),避免极值干扰刻度分布
  • 该逻辑完全基于输入数据的极值计算,更换DataFrame时只需替换cur_data和pp_data的数据源即可自动适配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 01:20:08