在matplotlib中设置时间序列的xlim

时间:2018-10-07 22:31:36

标签: python matplotlib time time-series timeserieschart

我想在matplotlib中绘制一个图,以显示2016年和2017年8月的温度。x轴是时间,y轴是温度。我尝试通过共享范围从2016-08-01 00:00:00到2016-08-31 23:00:00的x轴彼此叠加2个图(一个用于2016,一个用于2017)并仅显示每月的某天。

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

我该如何解决?

2 个答案:

答案 0 :(得分:1)

问题是,您的数据一直持续到每年8月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]])

但是,轴左右两侧的空白边距将消失。如果您想保留此边距并且仍希望避免使用9月1日的ticklabel,则可以使用以下标记隐藏最后一个x-tick标签:

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

答案 1 :(得分:0)

尝试:

ax.set_xlim(right=pd.Timestamp("2016-08-30 00:00:00"))

这会将限制设置为第30天。