在plotly.express和plotly graph_objects中工作,我试图添加箭头来表示从一个数据点到另一个数据点的移动。两个点共享一个分类 x 轴(序列号)。
import pandas as pd
import plotly.express as px
import plotly.graph_objects as po
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=i
y=df.loc[i,'MetA']
xref="x", yref="y",
text="",
showarrow=True,
axref="x", ayref='y',
ax=i
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 轴上绘制为字符串。
我自己想出来的
显然,plotly 不能保证 x 轴上分类数据的顺序(看起来很愚蠢,但w/e)
scat.update_xaxes(categoryorder = 'category ascending')