Matplotlib x-ticks выходит с января-января вместо января-декабря - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть ежедневные данные о погоде с 1 января по 31 декабря за год.Я строю эти ежедневные данные и хочу, чтобы мои x-ticks были ежемесячными интервалами.Но когда я строю график, тиканье идет с января по январь, а не с января по декабрь.Как мне избавиться от последнего x-тика, который есть у Яна, и ограничить его до декабря.

Если я задаю xlim с января по декабрь, график охватывает все оси.Я хочу немного пропустить начало и конец линий.

Дата указана в формате ГГГГ-ММ-ДД

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime

plt.figure()
plt.plot(minmax2014['Date'], minmax2014['min'], color='r', label='Record High')
plt.plot(minmax2014['Date'], minmax2014['max'], color='b', label='Record Low')

plt.legend(loc=2)

d=minmax2014['Date'].values
plt.gca().fill_between(d, minmax2014['max'], minmax2014['min'], facecolor='yellow', alpha=0.3)

plt.gca().xaxis.set_major_locator(mdates.MonthLocator())
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%b'))

the Graph with xticks

Ответы [ 2 ]

2 голосов
/ 27 сентября 2019

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

Примечание. Я использовал здесь datetime64, но вы легко можете использовать datetime.

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

fig, ax = plt.subplots(3, 1, constrained_layout=True)
dates = np.arange('2000-01-01T01:00:00', '2000-12-31T23:00:00',
                  dtype='datetime64[h]')
y = np.random.randn(len(dates))
for a in ax:
    a.plot(dates, y)

ax[1].set_xlim(np.datetime64('1999-12-31T23:59:59'), np.datetime64('2000-12-31T23:00:00'))


ticks = [np.datetime64('2000-%02d-01'%month) for month in range(1, 13)]
ax[2].set_xticks(ticks)
ax[2].xaxis.set_major_formatter(mdates.DateFormatter('%b'))

for a in ax[:-1]:
    a.xaxis.set_major_locator(mdates.MonthLocator())
    a.xaxis.set_major_formatter(mdates.DateFormatter('%b'))
plt.show()

enter image description here

0 голосов
/ 27 сентября 2019

Как уже упоминалось в вашем комментарии, да, мы можем переместить тики в середину месяца:

minmax2014 = pd.DataFrame({
    'min': np.random.uniform(0,10,365),
    'max': np.random.uniform(90,100,365),
    'Date':pd.date_range('2014-01-01', '2014-12-31', freq='D')
}, )
plt.figure()
plt.plot(minmax2014['Date'], minmax2014['min'], color='r', label='Record High')
plt.plot(minmax2014['Date'], minmax2014['max'], color='b', label='Record Low')

plt.legend(loc=2)

d=minmax2014['Date'].values
plt.gca().fill_between(d, minmax2014['max'], minmax2014['min'], facecolor='yellow', alpha=0.3)

# new ticks at 15th of months
ticks = pd.date_range('2014-01-01', '2014-12-31', freq='MS') + pd.Timedelta(days=14)

# set ticks
plt.xticks(ticks)

# set tick names
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%b'))

Вывод:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...