@sunsexsurf
IT & creative

Как в plotly совместить два графика?

Добрый вечер, Plotly-masters.
Нид хэлп.

есть два датафрейма:

1 - продажи золотых изделий по годам
sell_gold = pd.DataFrame({'y': ['2018-01-01', '2019-01-01', '2020-01-01'], 
                          'Изготовлено': [150, 300, 500],
                          'Реализовано': [93, 210, 424]})
sell_gold['y'] = pd.to_datetime(sell_gold['y'],
                                  format = '%Y-%m-%d')
sell_gold['y'] = sell_gold['y'].dt.year
sell_gold = sell_gold.set_index('y')


2 - график золота по годам:
Пример

Построить отдельно график по золоту (scatter) и отдельно barplots по изготовлено/продано - я могу.

Вопрос: как наложить графики друг на друга?
Проблема, как я вижу, в том, что по оси OX у меня и год по дням целиком, и годы как отсечки.
Есть возможность починить?

Хочтся именно в Plotly - он интерактивный.

Код с комментариями:

# Говорю, что будет вторая y ось (по левой будет откладываться курс металла, по правой - штуки товара)
fig = make_subplots(specs=[[{"secondary_y": True}]])

data = [
# линия
    go.Scatter(x=df.index, 
               y=df.silver, 
               name="Золото",
               line=dict(color='#f5c541')
              ),
# первый бар-плот (изготовлено)
    
    go.Bar(x=df.index, # assign x as the dataframe column 'x'
           y=sell_silver['Изготовлено'],
           name = 'Изготовлено'
          ),

# второй бар-плот (реализовано)
    go.Bar(x=df.index, # assign x as the dataframe column 'x'
           y=sell_silver['Реализовано'],
           name = 'Реализовано'
          )
]

# цикл, которым добавляю в fig каждое i в data 
for i in data:
    fig.append_trace(i)


# небольшие украшательства
fig.update_layout(
    barmode='group',
    plot_bgcolor='rgba(0,0,0,0)',
    title_text="Серебро (2018 - 2020 год)",
    title_x = 0.47,
    width=1024,
    height=600,
    legend=dict(x=.45, 
                xanchor="center", 
                orientation="h")
)

# Set x-axis title
fig.update_xaxes(title_text="<b>Годы</b>",
                 gridcolor='lightblue')

# Set y-axes titles
# первая ось OY - цена на серебро
fig.update_yaxes(title_text="<b>Цена на серебро</b> (р./грамм)", 
                 secondary_y=False,
#                  gridcolor='#f5c541'
                )

# вторые две оси OY - штуки - по одной на каждый go.Bar
fig.update_yaxes(title_text="<b>Шт.</b>", 
                 secondary_y=True,
                 gridcolor='#1167b1'
                )

fig.update_yaxes(title_text="<b>Шт.</b>", 
                 secondary_y=True,
                 gridcolor='#1167b1'
                )

fig.show()


не работает. Что я делаю не так?
  • Вопрос задан
  • 781 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы