你如何绘制熊猫系列图中的垂直线(vlines)?我正在使用Pandas绘制滚动方式等,并希望用垂直线标记重要位置.是否可以使用vlines或类似的东西来实现这一目标?如果是这样,有人可以提供一个例子吗?在这种情况下,x轴是日期时间.
我有一个代码可以让我绘制两个数据时间序列。我还有一些事件,我将它们绘制为时间序列中的一系列垂直线。我有三年的时间序列: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 …
Run Code Online (Sandbox Code Playgroud) 我有一个与此非常相似的问题:Pandas 绘制时间序列图,在选定日期使用垂直线,但该解决方案不适用于 Timedelta。
考虑这个系列:
In:
avg_hr.head()
Out:
00:00:00 69.000000
00:00:01 93.750000
00:00:02 93.125000
00:00:03 92.900000
00:00:04 93.222222
00:00:05 93.222222
...
Name: bpm, Length: 253, dtype: float64
Run Code Online (Sandbox Code Playgroud)
我可以像这样选择本系列中的元素:
In:
avg_hr[pd.Timedelta(seconds=3)]
Out:
92.9
Run Code Online (Sandbox Code Playgroud)
我可以生成这样的图表:
In:
avg_hr.plot()
Run Code Online (Sandbox Code Playgroud)
但是,我不能像这样用 TimeDelta 绘制垂直线:
In:
plt.axvline(x=pd.Timedelta(seconds=110), color='r', linestyle='dashed', linewidth=2)
Out:
TypeError: Cannot compare type 'Timedelta' with type 'float64'
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用 float 或 int,则垂直线出现在位置 0。
In:
plt.axvline(x=110, color='r', linestyle='dashed', linewidth=2)
Run Code Online (Sandbox Code Playgroud)
如何使用此 timedelta 索引绘制垂直线?
编辑:
即使我直接使用 x 轴上使用的键,我也遇到了同样的错误:
In:
for key in avg_hr.keys():
ax.axvline(x=key, color='r', linestyle='dashed', linewidth=2)
Out: …
Run Code Online (Sandbox Code Playgroud)