Plotly: Как изменить порядок трассировки или переключить стороны осей в заговоре? - PullRequest
1 голос
/ 24 апреля 2020

Я пытаюсь вывести строку на панель. Кажется, что любой след, имеющий secondary_y=True, будет нарисован поверх того, где secondary_y=False.

Это хорошо, но для этого конкретного набора данных ось стержня должна быть справа, потому что в противном случае это График сбивает с толку. Линия - та, которая находится в диапазоне 1-3, и полоса - та, которая находится в диапазоне 0-35k.

Другими словами, он должен выглядеть точно так же, но с переключенными осями Y. Есть ли какой-нибудь способ переключить оси или контролировать порядок, в котором он выводит aws следы, чтобы я мог заставить линию быть на вершине столбцов?

enter image description here

import pandas as pd
import plotly.graph_objects as go
from plotly.subplots import make_subplots
from plotly.offline import init_notebook_mode,  plot
init_notebook_mode()

rdf = pd.read_csv('us_covid_data_latest.csv', dtype={'fips':str})
incidence = pd.pivot_table(rdf, values='cases', index = 'date', aggfunc=np.sum)
incidence['actual_inc'] = incidence['cases'].diff()

def tail_plot_plotly(tail):

    fig = make_subplots(specs=[[{"secondary_y": True}]])

    fig.add_trace(
        go.Bar(
            x= incidence['date'].tail(tail),
            y= incidence['actual_inc'].tail(tail)
            ),
        secondary_y = False
        ) 


    fig.add_trace(
        go.Scatter(
            x= incidence['date'].tail(tail),
            y= incidence['R_t'].tail(tail)
            ),
        secondary_y = True
        )

    plot(fig)

tail_plot_plotly(50)

1 Ответ

1 голос
/ 24 апреля 2020

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

Столбцы - это большие числа, строки - это маленькие числа. Из коробки fig = make_subplots(specs=[[{"secondary_y": True}]]) обеспечит это:

enter image description here

Трассировка линии сверху = Хорошо. Номера столбцов слева = Bad.

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

fig.update_layout(dict(yaxis2={'anchor': 'x', 'overlaying': 'y', 'side': 'left'},
                  yaxis={'anchor': 'x', 'domain': [0.0, 1.0], 'side':'right'}))

Добавьте это к миксу, и вы получите:

enter image description here

Трасса линии сверху = Хорошо. Номера столбцов справа = Хорошо.

Полный код с образцом данных:

# imports
import plotly.graph_objects as go
import numpy as np
from plotly.subplots import make_subplots

# set figure twith multiple y axes
fig = make_subplots(specs=[[{"secondary_y": True}]])

# blue line with numbers from 1 to 3
fig.add_trace(
    go.Scatter(x=[0, 1, 2, 3, 4, 5],
               y=[1.5, 1.0, 1.3, 2.7, 1.8, 2.9]),secondary_y=True)

# red bars with big numbers
fig.add_trace(
    go.Bar(x=[0, 1, 2, 3, 4, 5],
           y=[np.nan, np.nan, np.nan, 100000, 20000, 250000]))

# update layout to put axes and values in the desired positions
fig.update_layout(dict(yaxis2={'anchor': 'x', 'overlaying': 'y', 'side': 'left'},
                  yaxis={'anchor': 'x', 'domain': [0.0, 1.0], 'side':'right'}))

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