在绘图图中一次选择多个按钮



我已经能够弄清楚如何使用按钮用新数据更新 Plotly 图。也就是说,如果我选择某个按钮(比如下面的示例中的 X1),绘图将发生变化,以便绘制该变量,依此类推。

但是,我希望能够一次选择多个按钮。例如,我希望能够选择 X1 和 X2 并在图表上绘制两者。

我在这方面一直无法取得任何进展,所以我希望有人能提供一些前进的线索。

import plotly
import plotly.graph_objs as go
import numpy as np
import pandas as pd
plotly.offline.init_notebook_mode(connected=True)
x0 = np.linspace(0,99,100)
y0 = np.random.normal(2, 0.4, 100)
y1 = np.random.normal(2, 0.4, 100)
y2 = np.random.normal(2, 0.4, 100)
trace0 = go.Scatter(x = x0, y = y0)
trace1 = go.Scatter(x = x0, y = y1, visible = False)
trace2 = go.Scatter(x = x0, y = y2, visible = False)
data = [trace0, trace1, trace2]
button1 = dict(label = 'X0', 
method = 'update', 
args = [{'visible': [True, False, False]}])
button2 = dict(label = 'X1', 
method = 'update', 
args = [{'visible': [False, True, False]}])
button3 = dict(label = 'X2', 
method = 'update', 
args = [{'visible': [False, False, True]}])

updatemenus = list([
dict(type="buttons", active = 0,
buttons = [button1, button2, button3], yanchor = 'top')])

layout = dict(title='Chart', showlegend=False,
updatemenus=updatemenus)                      
fig = dict(data=data, layout=layout)
plotly.offline.iplot(fig)

请参阅此答案以获取一个很好的示例,该示例解决了查看多个跟踪的功能要求,但不能解决一次选择 2 个按钮的视觉方面。

从本质上讲,您可以使按钮像切换一样工作。 因此,当您选择一个按钮时,它应该只影响跟踪的子集。 为此,您需要将单个值传递到"可见"中,然后传递您希望按钮影响的跟踪索引列表。然后,可以使用 args2 指定取消选择按钮时发生的情况。 因此,现在按钮关闭并在某些跟踪上切换,而不是指定所有跟踪的可见性。

所以按钮 1 将是:

button1 = dict(label = 'X0', 
method = 'restyle', 
args = [{'visible': True},[0]], args2 = [{'visible': False},[0]])

缺点是你仍然只有一个按钮"被选中"。 因此,如果从绘制的所有跟踪开始(并且未选择任何按钮),则会发生以下行为:

  1. 单击按钮2 (X1)。 没有任何反应,因为 args 告诉您的 X1 跟踪是可见的,并且它已经可见。 您会注意到 button2 现在显示为活动状态,按钮 1 不再显示为活动状态,尽管您的跟踪仍在显示。
  2. 再次单击按钮2(X1),您将看到X1消失。现在,不会显示选中任何按钮,但除了 X1 跟踪之外的所有按钮都应该可见。

我还不确定如何解决这个问题的视觉方面;但我希望这有所帮助!

最新更新