Скрытие аннотаций в Plotly / Python с помощью кнопки - PullRequest
0 голосов
/ 16 января 2019

Итак, я построил сетевой график, используя Plotly. Вывод в порядке. Теперь я хотел добавить метки для каждого узла сети. Для этого я использовал аннотации Plotly. pos содержит позиции как {node_id:(x,y)} для каждого узла в сети; G - это мой график сети.

layoutAnnotationList = []
for  k,p in pos.items():
    x = p[0]
    y = p[1]
    try:
        text = G.node[k]['hostname']
    except:
        text = k
    layoutAnnotationList.append( { 'x':x, 'y':y, 'text':text } )

После этого я добавил список layoutAnnotationList в сам макет.

layout = { 'annotations': layoutAnnotationList } 

Теперь я прочитал это о том, как добавить кнопки в макет, используя метод relayout, но я действительно не понимаю, как заставить эти кнопки отображать или скрывать аннотации .

Я создал список layoutButtons, я должен показать их на веб-странице, но я не знаю, как они функционируют.

layout = { 'annotations': layoutAnnotationList, 'updatemenus':layoutButtons }

enter image description here

Любой намек на то, как их использовать?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

Этот код в графической документации для Slider Controls предполагает, что словарь {'visible':[True, False...]} сопоставлен со списком данных, где True означает «показывать этот индекс моего списка данных» и False msgstr "скрыть этот индекс моего списка данных". Другими словами, у вас должно быть одно True / False на элемент данных.

В примере кода они изначально устанавливают visible для каждого элемента в data на False

data = [dict(
        visible = False, 
        line=dict(color='#00CED1', width=6),
        name = '? = '+str(step),
        x = np.arange(0,10,0.01),
        y = np.sin(step*np.arange(0,10,0.01))) for step in np.arange(0,5,0.1)]

Затем они переключают один на True, поэтому некоторые данные отображаются при загрузке графика:

data[10]['visible'] = True

Затем, при определении шагов для ползунка, они сбрасывают аргумент visible всех элементов данных на False, а затем переключают i-й на True:

steps = []
for i in range(len(data)):
    step = dict(
        method = 'restyle',  
        args = ['visible', [False] * len(data)],
    )
    step['args'][1][i] = True # Toggle i'th trace to "visible"
    steps.append(step)

Когда на ползунке выбран i-й шаг, i-й элемент данных станет видимым.

В исходном примере этого вопроса мы бы хотели установить для всех visible аргументов значение True для кнопки Label:On и все для False для кнопки Label:Off, чтобы вы могли написать :

'visible':[True] * len(pos)

'visible':[False] * len(pos)
0 голосов
/ 16 января 2019

Итак, после прочтения, решение заключается в использовании метода update при создании кнопок.

layoutButtons = list([
                dict(type="buttons",
                     active=-1,
                     buttons=list([   
                        dict(label = 'Label:On',
                             method = 'update',
                             args = [{'visible': [True, True, True, True]},{'annotations':layoutAnnotationList}]
                             ),
                        dict(label = 'Label:Off',
                             method = 'update',
                             args = [{'visible':[True, True, False, False]},{'annotations':[]}]
                             ),
                            ]
                        )
                     )
                ]   
            )

У меня есть идея здесь .До сих пор не знаю, как интерпретировать словарь {'visible':[True, True, False, False]} внутри аргументов, но он работает.

...