添加滑块以在绘图中显示子图



我试图使用 plotly 来显示 4 个不同函数如何随着它们的一个公共参数的变化而变化。我想要 4 个堆叠的子图(每个函数一个(,下面有一个滑块条用于该不断变化的参数。从本质上讲,我希望它看起来像此页面上具有共享 X 轴的子图示例,除了它下面显示的滑块。此页面看起来与我需要的页面看起来很相似,只是我不想在这里使用范围滑块。这不是我正在使用的实际代码,但为了方便起见,我将在结构上发布一些与我的代码类似的代码:

def f(rho):
dom = np.linspace(0, 1, 50)
f1 = (dom - rho) ** 2
f2 = np.sin(dom * rho)
f3 = np.abs(dom - rho)
f4 = dom ** rho
return f1, f2, f3, f4

我想看看这 4 个函数如何随着 rho 的变化而变化np.linspace(0.5, 2, 101),所以 rho 是由滑块控制的变量。我喜欢plotly,因为我想做一些自定义,并且能够滚动到图形上以查看函数值。

我最终在plotly社区论坛上找到了这篇文章,它用下面的代码示例回答了这个问题:

import plotly.graph_objs as go
from plotly.tools import make_subplots
fig = make_subplots(1, 2)
fig.add_scatter(y=[1, 3, 2], row=1, col=1, visible=True)
fig.add_scatter(y=[3, 1, 1.5], row=1, col=1, visible='legendonly')
fig.add_scatter(y=[2, 2, 1], row=1, col=1, visible='legendonly')
fig.add_scatter(y=[1, 3, 2], row=1, col=2, visible=True)
fig.add_scatter(y=[1.5, 2, 2.5], row=1, col=2, visible='legendonly')
fig.add_scatter(y=[2.5, 1.2, 2.9], row=1, col=2, visible='legendonly')
steps = []
for i in range(3):
step = dict(
method = 'restyle',  
args = ['visible', ['legendonly'] * len(fig.data)],
)
step['args'][1][i] = True
step['args'][1][i+3] = True
steps.append(step)
sliders = [dict(
steps = steps,
)]
fig.layout.sliders = sliders
go.FigureWidget(fig)

最新更新