С помощью двух выпадающих меню нанесите на график два разных набора данных - PullRequest
3 голосов
/ 29 апреля 2019

У меня есть два разных набора данных (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)

Используя этот код, он строит два набора данных в одной области,что я не хотел бы делать.И когда я выбираю правильный график в выпадающем меню, он просто не может загрузить нужный график.

1 Ответ

1 голос
/ 30 апреля 2019

Проблема в том, что вы напрямую назначаете трассы для 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
            ]))])

Если вы хотите показывать первую трассировку только при загрузке страницы, вам также нужно явно установить атрибут 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]

См. Официальный пример Plotly .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...