Кнопки Plotly с зависимыми взаимодействиями (Python) - PullRequest
0 голосов
/ 27 января 2019

Я пытаюсь построить трехмерную диаграмму рассеяния Plotly с большим количеством трасс и несколькими наборами кнопок, которые определяют, какое подмножество трасс видно.Я бы хотел, чтобы кнопки взаимодействовали так, как это зависит от состояния других кнопок.Например, предположим, что кнопка 1 и кнопка 2 принадлежат одной панели кнопок, а кнопка A и кнопка B принадлежат другой панели, и что одновременно можно нажимать только одну кнопку в каждой панели.Я бы хотел нажать кнопку А, когда кнопка 1 активна, чтобы отобразить поднабор трасс, отличный от нажатия кнопки А., когда кнопка 2 активна.

Ниже приведен пример с игрушкой.Он имеет набор данных из трех трасс и двух полос кнопок, но поведение каждой кнопки в настоящее время не зависит от других кнопок.Мне бы хотелось, чтобы кнопки вели себя зависимым образом, например,

  • 1 и нажатие A: показывать трассу 1
  • 1 и нажатие B: показывать трассы 1 и 2 *Нажатие 1008 *
  • 2 и A: показать трассу 3
  • 2 и нажатие B: показать все трассы
from plotly.offline import plot
import plotly.plotly as py
import plotly.graph_objs as go
import numpy as np

x, y, z = np.random.multivariate_normal(np.array([0,0,0]), np.eye(3), 20).transpose()
trace1 = go.Scatter3d(
    x=x,
    y=y,
    z=z,
    mode='markers',
    marker=dict(
        color='rgb(124, 252, 0)',
        size=12,
        opacity=0.8
    )
)

x2, y2, z2 = np.random.multivariate_normal(np.array([0,0,0]), np.eye(3), 20).transpose()
trace2 = go.Scatter3d(
    x=x2,
    y=y2,
    z=z2,
    mode='markers',
    marker=dict(
        color='rgb(30, 144, 255)',
        size=12,
        opacity=0.8
    )
)

x3, y3, z3 = np.random.multivariate_normal(np.array([0,0,0]), np.eye(3), 20).transpose()
trace3 = go.Scatter3d(
    x=x3,
    y=y3,
    z=z3,
    mode='markers',
    marker=dict(
        color='rgb(220, 20, 60)',
        size=12,
        opacity=0.8
    )
)

data = [trace1, trace2, trace3]

layout = go.Layout(
    margin=dict(
        l=0,
        r=0,
        b=0,
        t=0
    )
)

button_layer_1_height = 1.12
button_layer_2_height = 1.065

updatemenus=list([
    dict(
        buttons=list([
            dict(
                args=[{'visible': [True, False, True]}],
                label='Button 1',
                method='restyle'
            ),
            dict(
                args=[{'visible': [True, True, False]}],
                label='Button 2',
                method='restyle'
            ),
        ]),
        direction = 'left',
        pad = {'r': 10, 't': 10},
        showactive = True,
        type = 'buttons',
        x = 0.1,
        xanchor = 'left',
        y = button_layer_1_height,
        yanchor = 'top'
    ),
    dict(
        buttons=list([
            dict(
                args=[{'visible': [False, True, False]}],
                label='Button A',
                method='restyle'
            ),
            dict(
                args=['visible', [True, False, False]],
                label='Button B',
                method='restyle'
            )
        ]),
        direction = 'left',
        pad = {'r': 10, 't': 10},
        showactive = True,
        type = 'buttons',
        x = 0.1,
        xanchor = 'left',
        y = button_layer_2_height,
        yanchor = 'top'
    ),
])

layout['updatemenus']=updatemenus
fig = go.Figure(data=data, layout=layout)
plot(fig, filename='localtest.html')

1 Ответ

0 голосов
/ 29 января 2019

Я нашел ответ на этот вопрос в следующем уроке: https://dash.plot.ly/getting-started-part-2. Я создал приложение Dash, используя радио-элементы вместо кнопок, и результат отлично работает.

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