我有一段代码,可以绘制两个时间序列的数据。我还有一些事件,我将它们作为一系列垂直线绘制在时间序列中。我有三年的时间序列:2015年、2016年和2017年。我的代码在2015年和2016年运行良好,并产生了以下图形(这是2016年的):
然而,当我绘制2017年的数据时,我无法再现事件数据的垂直线,如下所示(很难看到,但在这张图中没有像第一张图中那样的虚线垂直线):
你知道为什么我的代码在2017年不起作用吗?数据存储在.csv文件中,事件数据从我转换成一系列日期时间对象的.csv文件中的数据列绘制出来。我已经检查过,2015年、2016年和2017年的.csv文件格式保持不变。
以下是我用于绘制的代码:
以下是我用于绘制的代码:
#Change format of "dates" column from string to datetime object
FMT = '%d/%m/%Y'
dtlist = []
for i in range(0, len(dates)):
dtlist.append(datetime.datetime.strptime(dates[i], FMT))
##EVENT:
#Remove all values where there is no event
df2 = df_17[pd.notnull(df_17['event'])]
#Convert event values to datetime objects
df2['event'] = pd.to_datetime(df2['event'], format="%d/%m/%Y")
event_list = df2['event'].tolist()
#Plot timeseries on graph
fig, ax1 = plt.subplots(figsize=(18, 6))
plt.plot(dtlist, series_1, color='b', label='Series 1')
ymin, ymax = ax1.get_ylim()
for value in event_list:
plt.axvline(x=value, ymin=ymin, ymax=ymax-1, color='k', linewidth=1.0, linestyle='--')
ax1.set_xlabel('Time')
ax1.set_ylabel('Series 1')
ax2=ax1.twinx()
ax2.plot(dtlist, series_2, color='r', label='Series_2')
ax2.set_ylabel('Series 2')
plt.legend
plt.show()
非常感谢您的帮助!
event_list
的值是多少?在2017-01-01
之后是否有日期? - unutbuymin
和ymax
的值是否合理吗?根据文档,它们必须在0和1之间才能绘制垂直线。ymax=ymax-1
看起来可能有点可疑。 - marcushobsonevent_list
是一个包含数据框列中的数值的列表:它有六个值,对应于2017年的事件。在2017-01-01
之后有日期,例如我的第一个事件是2017-01-25
。 - ailsa_naismith