是的,可以将辅助 y 轴添加到情节时间轴。但不是直接使用px.timeline。您将无法使用以下方法跳过辅助轴的“标准”方法:
fig = make_subplots(specs=[[{"secondary_y": True}]])
但是一旦你这样做了,你可以使用以下方法构建多个 px.timeline 对象:
fx1 = px.timeline(df1, x_start="Start", x_end="Finish", y="Task")
然后从那里“窃取”组件,例如:
fx1.data[0]
fig.layout.xaxis = fx1.layout.xaxis
然后将它们包含在您的第一个 fig 对象中:
fig.add_trace(
fx2.data[0],
secondary_y=True,
)
这是一个例子:
这是完整的代码:
import plotly.graph_objects as go
from plotly.subplots import make_subplots
df1 = pd.DataFrame([
dict(Task="Job A", Start='2009-01-01', Finish='2009-02-28', Completion_pct=50),
dict(Task="Job B", Start='2009-03-05', Finish='2009-04-15', Completion_pct=25),
# dict(Task="Job C", Start='2009-02-20', Finish='2009-05-30', Completion_pct=75),
dict(Task="Job C", Start='2009-04-02', Finish='2009-05-11', Completion_pct=75)
])
df2 = pd.DataFrame([
dict(Task="Job D", Start='2009-01-01', Finish='2009-02-12', Completion_pct=50),
dict(Task="Job E", Start='2009-03-05', Finish='2009-04-01', Completion_pct=25),
dict(Task="Job F", Start='2009-02-20', Finish='2009-08-01', Completion_pct=75)
])
# Create figure with secondary y-axis
fx1 = px.timeline(df1, x_start="Start", x_end="Finish", y="Task")
fx2 = px.timeline(df2, x_start="Start", x_end="Finish", y="Task")
# fx1 = px.timeline(df1, x_start="Start", x_end="Finish", y="Task", color="Task")
# fx2 = px.timeline(df2, x_start="Start", x_end="Finish", y="Task", color="Task")
fig = make_subplots(specs=[[{"secondary_y": True}]])
# Add traces
fig.add_trace(
fx1.data[0],
secondary_y=False,
)
fig.add_trace(
fx2.data[0],
secondary_y=True,
)
fig.layout.xaxis = fx1.layout.xaxis
# fx1.show()
# fx2.show()
fig.data[0].opacity = 0.2
fig.data[1].width = 0.5
fig.show()