使用下拉菜单将两个不同的数据集绘制成图

fil*_*ips 3 python plotly

我有两个不同的数据集(x0,y0),(x1,y1)。我需要创建两个图并使用下拉菜单在它们之间进行选择。

我正在使用这段代码:

import plotly
import plotly.graph_objs as go
import random

x0 = [x for x in range(0,20)]
x1 = [x for x in range(5,100)]

y0 = [random.randint(0,20) for x in range(len(x0))]
y1 = [random.randint(0,50) for x in range(len(x1))]

trace1 = go.Scatter(x=x0,y=y0,line=dict(shape='vh'))
trace2 = go.Scatter(x=x1,y=y1,line=dict(shape='vh'))

data = [trace1,trace2]

updatemenus = list([
    dict(active=0,
         buttons=list([   
            dict(label = "4 Aug 1",
                 method = "update",
                 args= [data[0]]),
            dict(label = "4 Aug 2",
                 method = "update",
                 args= [data[1]])]))])


layout = dict(title="Dropdown",
              showlegend=True,
              xaxis=dict(title="Hours"),
              yaxis=dict(title="Number"),
              updatemenus=updatemenus)

fig=dict(data=data, layout=layout)

plotly.offline.plot(fig)
Run Code Online (Sandbox Code Playgroud)

使用这段代码,它将两个数据集绘制到一个区域中,这是我不想做的。当我在下拉菜单上选择正确的图表时,它只是无法加载正确的图表。

glh*_*lhr 5

问题是您直接将跟踪分配给args. 相反,您应该使用该visible属性来控制哪些跟踪data可见:

updatemenus = list([
    dict(active=0,
         showactive = True,
         buttons=list([   
            dict(label = "4 Aug 1",
                 method = "update",
                 args = [{"visible": [True, False]}]), # hide trace2
            dict(label = "4 Aug 2",
                 method = "update",
                 args = [{"visible": [False, True]}]) # hide trace1
            ]))])
Run Code Online (Sandbox Code Playgroud)

如果您只想在页面加载时显示第一条轨迹,则还需要显式地将visible第二条轨迹的属性设置为False

trace1 = go.Scatter(x=x0,y=y0,line=dict(shape='vh'))
trace2 = go.Scatter(x=x1,y=y1,line=dict(shape='vh'), visible=False)
data = [trace1,trace2]
Run Code Online (Sandbox Code Playgroud)

请参阅官方 Plotly 示例

  • `active` 确定加载页面时选择下拉列表中的哪个条目。所以现在“active=0”意味着在下拉列表中选择了第一个条目“4 Aug 1”。您还可以将其设置为“-1”,以便不选择任何条目。请参阅https://plot.ly/python/reference/#layout-updatemenus-items-updatemenu-active (2认同)