Plotly 峰值未出现在子图上

Posted

技术标签:

【中文标题】Plotly 峰值未出现在子图上【英文标题】:Plotly Spikes Not Appearing on Subplots 【发布时间】:2021-12-13 03:25:58 【问题描述】:

我正在制作一个包含多个子图的图形。我希望每个子图都显示尖峰,但无法在第一个子图以外的任何其他地方显示尖峰。我没有看到通过 fig.update_traces 调用设置显示峰值的能力。有什么建议吗?

要重现的代码:

import plotly.graph_objs as go
from plotly.subplots import make_subplots


fig = make_subplots(rows=1, cols=2)

x1 = list(range(100))
y1 = [val**2 for val in x1]

x2 = list(range(150, 250))
y2 = [1./val for val in x2]

fig.add_trace(go.Scatter(x=x1, y=y1), row=1, col=1)
fig.add_trace(go.Scatter(x=x2, y=y2), row=1, col=2)

fig.update_layout(xaxis=dict(showspikes=True))

fig.show()

【问题讨论】:

这个 github 问题似乎相关:github.com/plotly/plotly.py/issues/1677 还有这个(扫描showspikesinside subplots):plotly.com/python-api-reference/generated/… 我尝试将 uirevision=True 设置为 true 但这没有帮助。它说它应该使更改在子图中持续存在,并且显示尖峰包含在持续存在的事物列表中,因此我不确定出了什么问题。真实应该尽可能“真实”。 【参考方案1】:

Rob 的回答可能有效,但您可以通过以下方式达到同样的效果:

fig.update_xaxes(showspikes = True) 

【讨论】:

两者都有效(所以我对两者都投了赞成票)但这是我希望的解决方案。谢谢!【参考方案2】: 确保在每个轴上设置 showspikes。您的图包含 xaxisxaxis2 下面的代码使用 dict 理解来更新所有如果轴
import plotly.graph_objs as go
from plotly.subplots import make_subplots


fig = make_subplots(rows=1, cols=2)

x1 = list(range(100))
y1 = [val**2 for val in x1]

x2 = list(range(150, 250))
y2 = [1./val for val in x2]

fig.add_trace(go.Scatter(x=x1, y=y1), row=1, col=1)
fig.add_trace(go.Scatter(x=x2, y=y2), row=1, col=2)

fig.update_layout(ax:"showspikes":True for ax in fig.to_dict()["layout"] if ax[0:3]=="xax")

【讨论】:

以上是关于Plotly 峰值未出现在子图上的主要内容,如果未能解决你的问题,请参考以下文章

在 R plotly 子图上获取单独的轴标签

子图上的 MST 递归构造

Plotly:将多个图形绘制为子图

Plotly:如何为所有子图设置 xticks?

Plotly Express:处理子图

R:图上的点未出现在数据中