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

Plotly子图add_annotation箭头样式异常:底部与顶部不一致

问题分析与解决

使用Plotly创建垂直子图并通过add_annotation添加标注时,出现顶部子图标注箭头样式正常、底部子图样式异常的问题,核心原因是标注的轴引用设置错误。

Plotly的子图中,每个子图的轴都有独立标识(比如第2行子图的x轴是x2,y轴是y2),但原代码里add_vline函数固定使用xref='x'、yref='y'——这只会对应第一个子图的轴,底部子图的标注用这个引用会出现轴映射错误,导致箭头样式混乱。

修复方案

修改add_vline函数,根据当前子图的行号动态生成轴引用:

def add_vline(fig,x0,y0,y1,row,col,text=None):
    dw = 10 # pixels
    if text == None:
        text = "%.1f"%(y1-y0)

    anns = []
    # 关键修改:根据row动态绑定当前子图的轴
    xref=f'x{row}'
    yref=f'y{row}'
    fig.add_annotation(#vertical1
        x=x0,y=y0,ax=x0,ay=y1,
        xref=xref,yref=yref,axref=xref,ayref=yref,
        showarrow=True,text='',
        arrowhead=2,arrowside='start+end',arrowsize=2,arrowwidth=.5,arrowcolor='black',
        row=row,col=col,
    )

    fig.add_annotation(# start     
                x=x0,y=y0,ax=-dw,ay=y0,
                xref=xref,yref=yref,axref='pixel',ayref=yref,
                showarrow=True,text='',arrowwidth=.5,arrowcolor='black',                             
        row=row,col=col,
            )

    fig.add_annotation(    
                x=x0,y=y0,ax=dw,ay=y0,
                xref=xref,yref=yref,axref='pixel',ayref=yref,
                showarrow=True,text='',arrowwidth=.5,arrowcolor='black',                             
        row=row,col=col,
            )
    fig.add_annotation( # end
                x=x0,y=y1,ax=-dw,ay=y1,
                xref=xref,yref=yref,axref='pixel',ayref=yref,
                showarrow=True,text='',arrowwidth=.5,arrowcolor='black',                             
        row=row,col=col,
            )
    fig.add_annotation(    
                x=x0,y=y1,ax=dw,ay=y1,
                xref=xref,yref=yref,axref='pixel',ayref=yref,
                showarrow=True,text='',arrowwidth=.5,arrowcolor='black',                             
        row=row,col=col,
            )
    fig.add_annotation(# text label
                x=x0, y=(y0+y1)/2,
                xref=xref,yref=yref,
                text=text,textangle=0,font=dict(color='black',size=14),
                bgcolor='white',
                showarrow=False,arrowhead=1,arrowwidth=2,
        row=row,col=col,
            )
    return

原理说明

Plotly子图的轴采用xN/yN的命名规则(N为子图行号),动态设置xref和yref后,标注会绑定到当前子图的专属轴上,避免跨子图的轴引用错误,所有子图的箭头样式就能保持一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 21:58:13