Установить xlim временных рядов в matplotlib - PullRequest
0 голосов
/ 08 октября 2018

Я хочу нарисовать график в matplotlib, который показывает температуру августа в 2016 и 2017 годах. Ось X - это время, а ось Y - это температура.Я пытаюсь сложить 2 графика (один для 2016 года, один для 2017 года) друг над другом, разделяя ось X в диапазоне от 2016-08-01 00:00:00 до 2016-08-31 23:00:00и показывает только день месяца.

import matplotlib.dates as mdates
myFmt = mdates.DateFormatter('%d')

# times series from 2016-08-01 00:00:00 to 2016-08-31 23:00:00
x = stats_august_2016.MESS_DATUM
# temperature in 08.2016
y1 = stats_august_2016.TT_TU
# temperature in 08.2017
y2 = stats_august_2017.TT_TU

f, ax = plt.subplots()

# plot temp in 08.2016 
ax.plot(x, y1, 'yellow', label = '2016')
# plot temp in 08.2017 
ax.plot(x, y2, 'red', label = '2017')
# format x-axis to show only days of the month  
ax.xaxis.set_major_formatter(myFmt)
ax.grid(True)

plt.rcParams["figure.figsize"] = (12, 8)
plt.xlabel("Day of the Month", fontsize = 20, color = 'Blue')
plt.xticks(fontsize = 15)
plt.ylabel("Temperature ($\degree$C)", fontsize = 20, color = 'Blue')
plt.yticks(fontsize = 15)
ax.set_ylim(5, 35)
plt.title("Temperature in August 2016 and 2017", fontsize = 30, color = 'DarkBlue')
plt.legend(prop = {'size': 20}, frameon = True, fancybox = True, shadow = True, framealpha = 1, bbox_to_anchor=(1.22, 1))
plt.show()

Все выглядит хорошо, за исключением последнего тика оси x 2016-09-01 00:00:00.И результат выглядит странно с 1 в конце.

enter image description here

Как я могу это исправить?

1 Ответ

0 голосов
/ 08 октября 2018

Проблема в том, что ваши данные изменяются до позднего времени 31 августа каждого года.

# times series from 2016-08-01 00:00:00 to 2016-08-31 23:00:00

В этом случае Matplotlib автоматически масштабируетсяось, доходящая до первого дня следующего месяца, отображается как 1 в выбранном вами формате.Если вы хотите избежать этого, вы можете установить предел оси x для последней отметки времени ваших данных

ax.set_xlim([x[0], x[-1]])

Однако поле слева и справа от вашей оси исчезнет.Если вы хотите сохранить это поле и все еще хотите избежать метки 1 сентября, вы можете скрыть последнюю метку x-tick с помощью

xticks = ax.xaxis.get_major_ticks()
xticks[-1].label1.set_visible(False)
...