Python - Plotly - динамический выбор оси Y на графике с несколькими осями - PullRequest
2 голосов
/ 16 апреля 2019

У меня есть фрейм данных из нескольких столбцов, каждый из которых содержит временной ряд. Я хочу сравнить два графика временных рядов за один раз, для которых я строю их наложение с двумя осями Y, как показано в примере здесь: https://plot.ly/python/multiple-axes/#two-y-axes

Мои проблемы:

  1. Я хочу графически разрешить пользователю выбирать только две трассы одновременно,

  2. динамически изменяет и регулирует ось Y в зависимости от того, какая трасса выбрана / не выбрана

Опираясь на пример, приведенный в ссылке выше:

import plotly
import plotly.plotly as py
import plotly.graph_objs as go

trace1 = go.Scatter(x=[1, 2, 3],y=[40, 50, 60],name='yaxis data')
trace2 = go.Scatter(x=[2, 3, 4],y=[4, 5, 6],name='yaxis2 data',yaxis='y2')
trace3 = go.Scatter( x=[3, 4, 5],y=[400, 500, 600],name='yaxis3 data',    yaxis='y2', visible = 'legendonly')
data = [trace1, trace2, trace3]
layout = go.Layout(
    title='Double Y Axis Example',
    yaxis=dict(
        title='yaxis title'
    ),
    yaxis2=dict(
        title='yaxis2 title',
        titlefont=dict(
            color='rgb(148, 103, 189)'
        ),
        tickfont=dict(
            color='rgb(148, 103, 189)'
        ),
        overlaying='y',
        side='right'
    )
)
fig = go.Figure(data=data, layout=layout)
plotly.offline.plot(fig)

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

Например, если видны «данные yaxis» и «данные yaxis2», пользователь должен отменить выбор любого из них, прежде чем выбрать «данные yaxis3» из легенд. Таким образом, если пользователь отменяет выборку «данных yaxis», которая находится с левой стороны графика, метки оси y данных yaxis3 должны идти с левой стороны. Если пользователь не выбрал «данные yaxis2», новые данные были бы справа.

Я хочу, чтобы yaxis= 'y' or 'y2' был назначен через интерактивный сеанс. Я не знаю, как этого добиться.

...