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

Python 通过引用日期时间索引值使用axvline绘制垂直线,python,matplotlib,Python,Matplotlib,我想创建一个条形图,在特定的索引引用处绘制一条垂直线。令人费解的是,当我试图用datetime索引绘制数据帧时,垂直线从未出现。但是,“int”索引没有问题 将单个datetime索引值从时间戳更改为datetime没有帮助 此代码适用于: import pandas as pd import matplotlib.pyplot as plt df = pd.DataFrame(np.random.randint(0,50,size=(50, 4)), columns=list('ABCD')

我想创建一个条形图,在特定的索引引用处绘制一条垂直线。令人费解的是,当我试图用datetime索引绘制数据帧时,垂直线从未出现。但是,“int”索引没有问题

将单个datetime索引值从时间戳更改为datetime没有帮助

此代码适用于:

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索引工作。我真的希望避免将整个数据帧索引从datetime更改为int,但如果这是唯一的解决方案,那就这样吧

谢谢


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

我认为您的第二个代码遗漏了一些内容;要紧的是,你是对的,我没有在第二个例子中定义索引。修好了,只需使用
x=40
。那就行了,谢谢!你能解释一下原因吗?我认为将数据帧传递给matplotlib会创建与数据帧索引匹配的x值。x值实际上是序数吗(x=50是第50项,即使我的索引是字符串)?都正确。但您使用的是熊猫绘图方法,而不是matplotlib。熊猫条形图将绘制序数。我认为你的第二个代码遗漏了一些东西;要紧的是,你是对的,我没有在第二个例子中定义索引。修好了,只需使用
x=40
。那就行了,谢谢!你能解释一下原因吗?我认为将数据帧传递给matplotlib会创建与数据帧索引匹配的x值。x值实际上是序数吗(x=50是第50项,即使我的索引是字符串)?都正确。但您使用的是熊猫绘图方法,而不是matplotlib。条形图将绘制序号。