Полностью офлайн и выпадающие виджеты - PullRequest
0 голосов
/ 18 декабря 2018

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

Я использую Jupyter Notebook.Я импортировал iplot и инициализировал режим ноутбука.

from plotly.offline import iplot, init_notebook_mode

Моя ось x всегда одинакова: X = [1,2,3,4,5,6,7,8,9,10,11,12].

Мои данные y - это то, что я хочу изменить через виджет: У меня есть список списков, и я хочу иметь возможность выбрать индекс списка, который я хочу построить.

Пока у меня есть график, на котором я строю все данные, и раскрывающийся виджетэто ничего не делает:

k=len(Y)

updatemenus = [
    {
        'buttons': [
            {
                'method': 'restyle',
                'label': str(i),
                'args': [
                    {},
                ]
            } for i in range(k)
        ],
        'direction': 'down',
        'showactive': True,
    }
]


iplot({
      'data':
           [{'x': [1,2,3,4,5,6,7,8,9,10,11,12],
             'y': Y[i],
             'name': str(i)
           } for i in range(k)],
      'layout': {'title': 'Title',
                'updatemenus': updatemenus}
  })

У меня есть чувство, что я должен написать что-то в «аргументах» updatemenus, но я не могу найти, что это будет.Я пробовал такие вещи, как 'y': Y[i], но он просто строит прямую линию, как если бы на iplot не было обозначено оси 'y'.

1 Ответ

0 голосов
/ 18 декабря 2018

Итак, я нашел решение, хотя, вероятно, оно не идеальное: в опции args в updatemenus я сейчас написал {'visible': [False]*i+[True]+[False]*(k-i-1)}.

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

iplot({
      'data':
           [{'x': [1,2,3,4,5,6,7,8,9,10,11,12],
             'y': Y[i],
             'name': str(i),
             'visible': i==0
           } for i in range(k)],
      'layout': {'title': 'Title',
                'updatemenus': updatemenus}
  })
...