Plotly:是不是可以在情节时间线上添加第二个 y 轴?
Posted
技术标签:
【中文标题】Plotly:是不是可以在情节时间线上添加第二个 y 轴?【英文标题】:Plotly: Is it possible to add a second y axis to plotly timeline?Plotly:是否可以在情节时间线上添加第二个 y 轴? 【发布时间】:2021-06-28 11:57:03 【问题描述】:我正在尝试将第二个 y 轴添加到绘图图中。我在文档中找不到任何提示。这可能吗?
fig = px.timeline(df, x_start="start", x_end="end", y="duration")
fig.update_yaxes(autorange="reversed", type='category')
fig.write_html('fig.html', auto_open=True)
在图的右侧,我想要另一个 y 轴将信息显示为字符串。
如果有人可以帮助我,我将非常感激。
【问题讨论】:
plotly.com/python/multiple-axes/… 这应该会有所帮助 @edgj4718 字符串形式的信息?你不希望次轴与图中的实际轨迹相关联吗? 我希望“yaxis”和“secondary yaxis”都与“start”和“end”值相关。你认为这可以通过在两条迹线中使用相同的 x_start 和 x_end 但不同的 y 然后将这两条迹线绘制在一个图中来实现吗? @edgj4718 我的建议对你有什么效果? 您好。不幸的是,它没有。实际上,我想要的正是上面的图片,右边还有一个额外的 Y 轴。右侧的 Y 轴将显示与左侧几乎相同的信息。左边的那个实际上显示了开始时间和结束时间(持续时间)之间的差异。右边的将显示特定机器在该持续时间内的 CycleTime。例如,在机器 x 上生产一件作品持续了 200 秒(左侧信息)。机器在这件作品上工作 170 年代(右侧信息)。 【参考方案1】:是的,可以将辅助 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()
【讨论】:
以上是关于Plotly:是不是可以在情节时间线上添加第二个 y 轴?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用情节提要为 ipad 的 xcode 中的第一个视图内的第二个视图添加动画
如何使用 plotly 在散点图中显示第三个变量的第二个图例?
plotly vs seaborn:python中的小提琴情节