Почему первое число месяца автоматически отображается как тик в matplotlib.plot_date? - PullRequest
0 голосов
/ 04 января 2019

У меня есть геоданные с датой в виде строки и датой в качестве datetime64 [нс].Я использую matplotlib 3.0.2.Я попытался очистить данные, используя plt.cla(), plt.clear() и plt.clf(), как упоминалось в других публикациях и вопросах, но, несмотря ни на что, данные отображают то, что представляется форматированием по главной и второстепенной осям, без каких-либо подсказок - при условиичто в plot_date первое число месяца является «большой» осью. Это мой график (отредактировано для ясности) .Кажется, что это вызвано новыми обновлениями в 3.0.2 (из 2.1.0), трудно понять, что именно вызывает это

Я видел этот вопрос / ответ , который, кажется, находится вв моей проблеме, но в этом случае было желательно использовать под-даты и т. д., хотя я запутался, поскольку это не было постоянной проблемой для меня в других подобных наборах данных.

Dataframe:
          Date    var_name
106 2018-04-03  0.79132056
216 2018-04-09  0.75112718
546 2018-06-12  0.73359674
646 2018-07-03  0.72600174
706 2018-07-23  0.71263647



figsize=(14,10)
fig, ax = plt.subplots(figsize=figsize)
data['Date'] = pd.to_datetime(data['Date'])

plt.xticks(rotation=30, ha='right')
plt.grid(color='k', lw=0.2)

plt.plot_date(data.Date, data.var_name)

UPDATE

Спасибо Jody и ImportanceOfBeingErnest за то, что они указали на это, было вызвано изменением kwargs в matplotlib версии 3.0.2, которое исправлено в 3.1, где interval_multiples=True теперь является значением по умолчанию для построения первогомесяца в дополнение к другим тикам.@ImportanceOfBeingErnest был рецензентом.

PR link

наиболее актуальная проблема matplotlib # 12925 .Выпуск Matplot lib # 9978 также актуален

1 Ответ

0 голосов
/ 04 января 2019

Спасибо @TheImportanceOfBeingErnest и @JodyKlymak за их комментарии, предлагающие использовать AutoDateLocator и MonthLocator.Следующий фрагмент оказался моим обходным путем. Окончательная цифра

Подход с большим контролем:

figsize=(14,10)
fig, ax = plt.subplots(figsize=figsize)
data['Date'] = pd.to_datetime(data['Date'])

plt.xticks(rotation=30, ha='right')
plt.grid(color='k', lw=0.2)

months = matplotlib.dates.MonthLocator()
ax.xaxis.set_major_locator(months)
year_month = matplotlib.dates.DateFormatter('%Y-%m')
ax.xaxis.set_major_formatter(year_month)

plt.plot_date(data.Date, data.var_name)

Подход с использованием AutoDateLocator при сохранении старого поведения :

locator = matplotlib.dates.AutoDateLocator(interval_multiples=False)
ax.xaxis.set_major_locator(locator)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...