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

Plotly不同缩放双Y轴对齐 实现单套Y轴刻度显示

Plotly双Y轴网格对齐实现方案

核心逻辑:双Y轴网格错位的本质是两个轴自动计算的刻度分段数、间隔不统一,只要给两个Y轴设置完全相同的刻度分段数量,按比例映射各自的数值范围,就能让网格线完全重合,视觉上呈现单套网格的效果。

修改要点

  • 删除原有代码中冲突的yaxis2=dict(anchor="x2")配置,双Y轴默认锚定同一个X轴,该配置会打乱轴映射关系
  • 提前计算两个数据序列的数值范围,给轴范围预留5%的边距避免折线贴到图表边缘
  • 给两个Y轴设置相同的nticks(刻度总数)参数,强制刻度点按比例对齐
  • 仅保留左侧Y轴的网格绘制,关闭右侧Y轴的网格,避免重复绘制导致的网格样式异常
  • 保留原有左右Y轴的轴线颜色区分,对应两个不同数据序列

修改后完整代码

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

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

# 计算两个序列的数值范围,预留边距避免折线贴边
cb_min, cb_max = df['Adj Close'].min(), df['Adj Close'].max()
btc_min, btc_max = df2['Adj Close'].min(), df2['Adj Close'].max()
cb_pad = (cb_max - cb_min) * 0.05
btc_pad = (btc_max - btc_min) * 0.05

# 添加两条折线
fig.add_trace(go.Scatter(
    x=df['Date'], 
    y=df['Adj Close'], 
    line_color='#222f3e', 
    name='Coinbase'
), secondary_y=True)
fig.add_trace(go.Scatter(
    x=df2['Date'], 
    y=df2['Adj Close'], 
    line_color='#FFC312', 
    name='Bitcoin'
), secondary_y=False)

# 全局布局配置
fig.update_layout(
    title={'text':'Performance comparada: Bitcoin e Coinbase','x':0.5},
    xaxis_title='',
    yaxis_title='',
    paper_bgcolor='rgba(0,0,0,0)',
    plot_bgcolor='rgba(0,0,0,0)',
    font=dict(family="Montserrat SemiBold"),
    yaxis=dict(
        range=[btc_min - btc_pad, btc_max + btc_pad],
        nticks=6,
        showgrid=True,
        gridwidth=0.005,
        gridcolor='#dfe6e9',
        tickprefix='$',
        showline=True,
        linewidth=2,
        linecolor='#222f3e',
        side='left'
    ),
    yaxis2=dict(
        range=[cb_min - cb_pad, cb_max + cb_pad],
        nticks=6,
        showgrid=False,
        tickprefix='$',
        showline=True,
        linewidth=2,
        linecolor='#FFC312',
        side='right',
        overlaying='y'
    )
)

# X轴样式配置
fig.update_xaxes(
    showgrid=True,
    gridwidth=0.005, 
    gridcolor='#dfe6e9',
    showline=True, 
    linewidth=2, 
    linecolor='black'
)

fig.show()

可调参数说明

  • 如果需要调整网格密度,同步修改两个Y轴的nticks值即可,数值越大网格越密
  • 如果需要固定刻度间隔而非固定刻度数量,可以把nticks替换为dtick参数,两个轴的dtick按各自数值范围的比例设置即可,效果完全一致
  • 预留边距比例可以根据显示需求调整,默认5%适配绝大多数折线图场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:57:33