Я пытаюсь настроить форматирование меток даты на оси абсцисс, чтобы в нем отображались только значения года и месяца. Из того, что я нашел в Интернете, я должен использовать mdates.DateFormatter
, но он не вступает в силу с моим текущим кодом, как есть. Кто-нибудь видит, где проблема? (даты - это индекс пирамиды данных)
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
import pandas as pd
fig = plt.figure(figsize = (10,6))
ax = fig.add_subplot(111)
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))
basicDF['some_column'].plot(ax=ax, kind='bar', rot=75)
ax.xaxis_date()
Воспроизводимый код сценария:
import numpy as np
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
import pandas as pd
rng = pd.date_range('1/1/2014', periods=20, freq='m')
blah = pd.DataFrame(data = np.random.randn(len(rng)), index=rng)
fig = plt.figure(figsize = (10,6))
ax = fig.add_subplot(111)
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))
blah.plot(ax=ax, kind='bar')
ax.xaxis_date()
До сих пор не могу найти только год и месяц.
Если я установлю формат после .plot, получим ошибку, подобную этой:
ValueError: DateFormatter обнаружил значение x = 0, что является недопустимой датой. Обычно это происходит потому, что вы не сообщили оси, что она наносит на график даты, например, с помощью
x.xaxis_date()
.
То же самое, если я поставлю его перед ax.xaxis_date() или после.