Добрый вечер, 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()
не работает. Что я делаю не так?