DateFormatter выводит 1970 год как год, а не исходный год в наборе данных

#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()
 

Результат выглядит следующим образом
введите описание изображения здесь
Что я делаю не так? Пожалуйста, помогите.

Мой набор данных выглядит следующим образом: введите описание изображения здесь

Вот данные df_month: введите описание изображения здесь

Комментарии:

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()