在折线图扭曲刻度上添加垂直线

Adding vertical lines on line graph distorting scale

我有一个在 X 轴上带有日期时间的折线图,我修改了格式以显示 HH:MM:SS

fig.update_xaxes(title_font=dict(size=12), tickformat='%X')

在添加垂直线之前,比例是完美的:

示例 1:vline 添加值:1970-01-01T00:00:00.000000000:

示例 2 vline 添加值:1970-01-01T00:01:34.000000000

我的竖线代码是:

for loop...
if time in df['ColA'].values:
fig.add_vline(x=df[df['ColA'] == time)]['ColB'].values[0])
 

ColA 和变量时间(循环中的迭代器)是字符串类型并具有这样的值。值来自回调的选定行索引

0:00:00
0:01:34

ColB 是 datetime64[ns] 类型:

1970-01-01 00:00:00
1970-01-01 00:01:34

我的图是一个 px.line 多面行图,我在 X 轴上使用 ColB。

为什么vline值x是同一类型且在同一范围内,比例完全改变?

  • 这一切都归结为类型强制
  • df["ColA"].values returns datetime64[ns]
  • 数组
  • 检查 fig.data[0].x 并且它 returns 一个 datetime.datetime
  • 的数组
  • 使它们与 pd.Timestamp(time).to_pydatetime()
  • 一致
  • 已经模拟了一些数据,没有分面,因为你没有在你的问题中包含任何细节
ROWS = 20
df = pd.DataFrame({"ColA":pd.date_range("1-jan-1970", freq="4H", periods=ROWS), "ColB":np.random.uniform(1,30, ROWS)})

fig = px.line(df, x="ColA", y="ColB")
fig.update_xaxes(title_font=dict(size=12), tickformat='%X')

for time in df["ColA"].values:
    if time in df['ColA'].values:
        fig.add_vline(x=pd.Timestamp(time).to_pydatetime())

fig