#python #pandas #matplotlib #time-series
#python #pandas #matplotlib #временные ряды
Вопрос:
Я пытаюсь построить данные временных рядов. Но тики по оси x идут не так, как следовало бы. Я хотел вывести mont и year как отметки оси x. вот мой код
from matplotlib.dates import DateFormatter
import matplotlib.dates as mdates
fig,ax = plt.subplots()
df_month.loc['2017', "Volume"].plot.bar(color='blue', ax=ax)
ax.set_ylabel("Volume")
ax.set_title("Volume")
date_form = DateFormatter("%y-%m")
ax.xaxis.set_major_formatter(date_form)
plt.xticks(rotation=45)
plt.show()
Результат выглядит следующим образом
Что я делаю не так? Пожалуйста, помогите.
Комментарии:
1. Можно ли увидеть (образец) данных df_month?
2. @RuthgerRighart, здесь я добавил данные df_month в вопрос. Пожалуйста, проверьте.
3. Между pandas и matplotlib произошло плохое взаимодействие из-за изменения эпохи matplotlib. Это было исправлено как на стороне matplotlib, так и на pandas, поэтому у вас может быть плохая комбинация версий.
4. @Jody Klymak: Не могли бы вы сказать, какие версии плохо взаимодействовали, или у вас есть URL-адрес, в котором говорится об этой проблеме?
Ответ №1:
Ниже приведены правильные метки по оси x.
Импорт модулей
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter
import matplotlib.dates as mdates
Пример данных
df_month = pd.DataFrame({'Date':['2006-01-03', '2006-02-04', '2006-02-08'], 'Volume':[24232729, 20553479, 20500000]}) # '2006-01-03', '2006-01-04'
df_month['Date'] = pd.to_datetime(df_month['Date'])
Построение графика
fig,ax = plt.subplots()
ax.set_ylabel("Volume")
ax.set_title("Volume")
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))
ax.bar(df_month['Date'], df_month['Volume'])
plt.xticks(df_month['Date'], rotation=90)
plt.show()