在折线图扭曲刻度上添加垂直线
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
我有一个在 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