Python3.11.1中ax.axvline绘制时间戳竖线失效问题求助
问题分析与解决方案
这种情况大概率不是Python3.11本身的问题,而是Pandas与Matplotlib在Python3.11环境下的兼容性bug——旧版Pandas在处理Python3.11的时间类型时,无法正确将pd.Timestamp传递给Matplotlib的坐标轴,导致竖线被绘制在可视范围外,看起来像是“不显示”。
快速解决方法
试试下面任意一种方案,都能让竖线正常显示:
- 将
pd.Timestamp转为Python原生datetime对象:ax1.axvline(x=pd.Timestamp('2006-1-1').to_pydatetime()) - 用NumPy的
datetime64类型替代:import numpy as np ax1.axvline(x=np.datetime64('2006-01-01')) - 升级Pandas到适配Python3.11的版本(推荐pandas>=2.0.0,该版本开始正式支持Python3.11,修复了这类时间轴兼容性问题)
验证逻辑
你可以单独用Matplotlib测试排除Python本身的问题:
import matplotlib.pyplot as plt import pandas as pd import numpy as np # 构造测试数据 dates = pd.date_range('2005-01-01', '2007-01-01') df_sales = pd.DataFrame({'Sales': np.random.randn(len(dates))}, index=dates) # 用原生datetime画竖线 ax = plt.subplots()[1] ax.plot(df_sales.index, df_sales['Sales']) ax.axvline(x=pd.Timestamp('2006-1-1').to_pydatetime(), color='red') plt.show()
如果这段代码能正常显示竖线,说明问题确实出在Pandas的plot方法与Python3.11的适配层,而非Python本身。
内容的提问来源于stack exchange,提问作者Wen
相关产品推荐
相关产品推荐

