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

Plotly分类X轴添加标注箭头:大数据集错位问题求助

解决Plotly分类字符串X轴箭头错位问题

问题描述

使用Plotly Express和Plotly Graph Objects为字符串类型的分类X轴(序列号SN)上的同一类别数据点添加箭头时,小数据集测试正常,但应用于大数据集时出现箭头错位,且需求要求X轴必须保留字符串格式展示。

问题原因

原代码使用df.index的数值索引作为箭头的x轴坐标,当数据集规模较大时,Plotly对分类轴的内部索引映射易出现偏差,导致箭头位置错位。正确的做法应直接使用分类轴的字符串标签(即SN值)作为箭头的x坐标取值,而非依赖数值索引。

修正后的代码

import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import plotly.io as pio

# 构造测试数据(可替换为大数据集)
df = pd.DataFrame([['1600',255,110],['1832',235,92],['1732',210,200]])
df.columns = ['SN','MetA','MetB']
df = df.sort_values('SN')
df.reset_index(drop = True,inplace = True)

# 创建散点图
scat = px.scatter(df, x = 'SN', y = ['MetA','MetB'])

list_of_all_arrows = []

for i in df.index:
    arrow = go.layout.Annotation(dict(
                    x=df.loc[i,'SN'],  # 改为SN字符串标签
                    y=df.loc[i,'MetA'],
                    xref="x", 
                    yref="y",
                    text="",
                    showarrow=True,
                    axref="x", 
                    ayref='y',
                    ax=df.loc[i,'SN'],  # 改为SN字符串标签
                    ay=df.loc[i,'MetB'],
                    arrowhead=3,
                    arrowwidth=1.5,
                    arrowcolor='rgb(255,51,0)',
                ))
    list_of_all_arrows.append(arrow) 

scat.update_layout(annotations = list_of_all_arrows)

pio.show(scat)

关键修改点

  • 将箭头的x和ax参数从数值索引i替换为对应的SN字符串标签,确保箭头始终定位在正确的分类轴位置
  • 修正了原代码中字典键值对末尾缺失逗号的语法错误,避免运行报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 15:42:24