通过引用日期时间索引值使用axvline绘制垂直线

时间:2019-08-13 15:46:23

标签: python matplotlib

我想创建一个在特定索引参考处绘制一条垂直线的条形图。莫名其妙地,当我尝试绘制带有日期时间索引的数据框时,垂直线永远不会出现。但是,“ int”索引没有问题。

将各个日期时间索引值从“时间戳”更改为日期时间没有帮助。

此代码有效:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.randint(0,50,size=(50, 4)), columns=list('ABCD'))
ax = df.plot(xticks=df.index, kind="bar", stacked=True)
ax.axvline(x=df.index[40], linewidth = 10, color='k', linestyle='--')
plt.show()

此代码不起作用:

import pandas as pd
import matplotlib.pyplot as plt

numdays = 50
base = datetime.datetime.today()
date_list = [base - datetime.timedelta(days=x) for x in range(numdays)][::-1]

df = pd.DataFrame(np.random.randint(0,50,size=(50, 4)), columns=list('ABCD'), index=date_list)
ax = df.plot(xticks=df.index, kind="bar", stacked=True)
ax.axvline(x=df.index[40], linewidth = 10, color='k', linestyle='--')
plt.show()

我会认为设置ax.axvline(x = df.index [40],...)在两种情况下的行为都相同,因为df.index列表的第40个元素也是第40个x值在情节中。但是我不能让它为日期时间索引工作。我真的很想避免将整个数据框索引从datetime更改为int,但是如果那是唯一的解决方案,那就去吧。

谢谢。

编辑:为第二个代码段的数据帧设置日期时间索引。

0 个答案:

没有答案