#python #pandas #matplotlib
#python #pandas #matplotlib
Вопрос:
Ниже приведен сценарий для упрощенной версии рассматриваемого df:
import pandas as pd
df = pd.DataFrame({
'week': [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],
'month' : ['JAN','JAN ','JAN','JAN','FEB','FEB','FEB','FEB','MAR','MAR',
'MAR','MAR','APR','APR','APR','APR','APR'],
'weekly_stock' : [4,2,5,6,2,3,6,8,7,9,5,3,5,4,5,8,9]
})
df
week month weekly_stock
0 1 JAN 4
1 2 JAN 2
2 3 JAN 5
3 4 JAN 6
4 5 FEB 2
5 6 FEB 3
6 7 FEB 6
7 8 FEB 8
8 9 MAR 7
9 10 MAR 9
10 11 MAR 5
11 12 MAR 3
12 13 APR 5
13 14 APR 4
14 15 APR 5
15 16 APR 8
16 17 APR 9
В текущем виде приведенный ниже скрипт создает столбчатую диаграмму с week
для x-меток
# plot chart
labels=df.week
line=df['weekly_stock']
fig, ax = plt.subplots(figsize=(20,8))
line1=plt.plot(line, label = '2019')
ax.set_xticks(x)
ax.set_xticklabels(labels, rotation=0)
ax.set_ylabel('Stock')
ax.set_xlabel('week')
plt.title('weekly stock')
Тем не менее, я хотел бы иметь в month
качестве x-метки.
ПРЕДПОЛАГАЕМЫЙ ГРАФИК:
Любая помощь будет с благодарностью принята.
Комментарии:
1. попробуйте:
labels= [( x,y) for x, y in zip(df['week'], df['month'])]
Ответ №1:
Моя рекомендация — иметь допустимый столбец значений даты и времени вместо 'month'
и 'week'
, как у вас. Matplotlib довольно умен при работе с допустимыми значениями даты и времени, поэтому сначала я бы структурировал даты следующим образом:
import pandas as pd
import matplotlib.pyplot as plt
# valid datetime values in a range
dates = pd.date_range(
start='2019-01-01',
end='2019-04-30',
freq='W', # weekly increments
name='dates',
closed='left'
)
weekly_stocks = [4,2,5,6,2,3,6,8,7,9,5,3,5,4,5,8,9]
df = pd.DataFrame(
{'weekly_stocks': weekly_stocks},
index=dates # set dates column as index
)
df.plot(
figsize=(20,8),
kind='line',
title='Weekly Stocks',
legend=False,
xlabel='Week',
ylabel='Stock'
)
plt.grid(which='both', linestyle='--', linewidth=0.5)
Теперь это довольно простое решение. Обратите внимание, что отметки отображаются именно там, где недели; Matplotlib сделал всю работу за нас!
- (проще) Вы можете либо заложить «основу данных» перед корректным построением графика, т. Е. отформатировать данные для Matplotlib, чтобы выполнить всю работу, как мы делали выше (представьте, что тики являются фактическими точками даты, созданными в
pd.date_range()
). - (сложнее) Используйте локаторы / форматеры тиков, как указано в документах здесь
Надеюсь, это было полезно.
Комментарии:
1. Фантастика! Большое вам спасибо за ваш хорошо объясненный ответ!