15 August 2020

Plotly: вторая ось

Для задания второй оси в Plotly используется несколько другой подход, нежели в matplotlib - там ось не клонируется ( вызовом  twinx ), а задается ее наличии при создании холста.
Ранее мы использовали метод go.Figure для его создания, но он не принимает аргументов для определения второй оси. Поэтому надо использовать другой метод make_subplots:

from plotly.subplots import make_subplots
fig = make_subplots(specs=[[{"secondary_y":True}]])


Как можно видеть, задание второй оси регулируется параметром secondary_y, но он оборачивается в хитрый тип - список списков. Зачем так сделали разработчки Plotly - непонятно, но именно так это работает.

Далее мы также создаем две точечных диаграммы:

trc1 = go.Scatter(
    x = x, y = y,
    name = 'Scatter sample',
    line = dict(color= 'green', dash='dot'),
    marker_symbol ='diamond-open',
    mode ='markers+lines'
)

trc2 = go.Scatter(
    x = x, y = y2,
    name = 'Scatter sample 2',
    line = dict(color= 'blue', dash='dot'),
    marker_symbol ='diamond-open',
    mode ='markers+lines'
)


И при добавлении указываем на какую ось добавлять.
Первый - на основную:

fig.add_trace ( trc1 , secondary_y=False )


После этого добавления у нас появляется данные первой диаграммы:

Как можно видеть - второй оси пока еще нет.
Теперь добавляем вторую диаграмму на вторую ось:

fig.add_trace ( trc2 ,  secondary_y=True )

И вот тут ось уже появляется:

Для подписи оси X используется тот же метод: 

fig.update_xaxes( title = 'My new X axis' )

А вот для подписи осей Y уже надо указывать какую:

fig.update_yaxes( title = 'Primary Y' , secondary_y=False  )
fig.update_yaxes( title = 'Secondary Y' , secondary_y=True  )


Вот результат:


Таким образом создание второй оси в Plotly делается несколько по-другому, но тоже несложно.

No comments:

Post a Comment