我可以向第二个 Y 轴添加一条水平线,如下所示:
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
df = pd.DataFrame(
{
"A": [5, 4, 7],
"B": [200, 300, 100],
},
index=[1, 2, 3],
)
fig = px.bar(
df["A"],
orientation="v",
)
fig.add_trace(
go.Scatter(
x=df.index,
y=df["B"],
yaxis="y2",
name="B",
)
)
fig.add_hline(
y=df["B"].mean(),
yref="y2",
)
fig.update_layout(
xaxis_title=None,
yaxis_title=None,
legend_title=None,
xaxis=dict(
autorange="reversed",
),
yaxis=dict(
side="left",
showgrid=False,
),
yaxis2=dict(
overlaying="y",
side="right",
showgrid=False,
),
)
fig.show()
但是,我无法向第二个 X 轴添加一条垂直线:
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
df = pd.DataFrame(
{
"A": [5, 4, 7],
"B": [200, 300, 100],
},
index=[1, 2, 3],
)
fig = px.bar(
df["A"],
orientation="h",
)
fig.add_trace(
go.Scatter(
y=df.index,
x=df["B"],
xaxis="x2",
name="B",
)
)
fig.add_vline(
x=df["B"].mean(),
xref="x2",
)
fig.update_layout(
xaxis_title=None,
yaxis_title=None,
legend_title=None,
yaxis=dict(
autorange="reversed",
),
xaxis=dict(
side="top",
showgrid=False,
),
xaxis2=dict(
overlaying="x",
side="bottom",
showgrid=False,
),
)
fig.show()
这个错误的原因是你在
go.Scatter
轨迹中将
y
设置为
df.index
,而你的
xaxis2
是根据
df["B"]
的值的。当你尝试添加一条垂直线到
xref="x2"
时,它会寻找与
df.index
中的值相对应的位置,而这些值并不存在于第二个 X 轴上。
为了解决这个问题,你需要为你的
go.Scatter
轨迹创建一个与
df["B"]
的值相对应的新的
x
值数组。你可以使用
np.arange()
来做到这一点,它会创建一个从 0 到
df["B"]
长度的数组。
以下是修改后的代码:
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import numpy as np
df = pd.DataFrame(
{
"A": [5, 4, 7],
"B": [200, 300, 100],
},
index=[1, 2, 3],
)
fig = px.bar(
df["A"],
orientation="h",
)
fig.add_trace(
go.Scatter(
y=np.arange(len(df["B"])), # 使用 np.arange() 创建新的 x 值
x=df["B"],
xaxis="x2",
name="B",
)
)
fig.add_vline(
x=df["B"].mean(),
xref="x2",
)
fig.update_layout(
xaxis_title=None,
yaxis_title=None,
legend_title=None,
yaxis=dict(
autorange="reversed",
),
xaxis=dict(
side="top",
showgrid=False,
),
xaxis2=dict(
overlaying="x",
side="bottom",
showgrid=False,
),
)
fig.show()
这个修改后的代码应该能够正确地在第二个 X 轴上添加一条垂直线。
标签:python,pandas,plotly From: 78781464