ail*_*ith 4 python plot numpy matplotlib
我有一个代码可以让我绘制两个数据时间序列。我还有一些事件,我将它们绘制为时间序列中的一系列垂直线。我有三年的时间序列: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()
Run Code Online (Sandbox Code Playgroud)
非常感谢任何帮助!
在评论中,您说您从Pandas 绘制时间序列中ymin得到了值的想法,在选定日期处使用垂直线,但那里的示例使用,而不是。 使用数据规模。 期望和的值介于 0 和 1 之间。也就是说,这些值以 y 轴的分数(0 到 1 之间)指定。如果您指定和,您将得到一条从轴底部到轴中部的垂直线,无论绘图的当前数据比例如何。如果放大或缩小,或者向上或向下平移,半高垂直线仍然存在。ymaxvlinesaxvlinevlinesaxvlineyminymaxyymin=0ymax=0.5
ymin和 的默认值ymax分别是 0 和 1,因此要获得从下到上的一行,您可以简单地省略参数。
尝试这个:
plt.axvline(x=value, color='k', linewidth=1.0, linestyle='--')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7350 次 |
| 最近记录: |