Matplotlib绘图报错:Failed to convert value(s) to axis units datetime 求助
解决Matplotlib绘制折线图时的datetime轴单位转换错误
你的代码报错核心原因是x轴参数(delta, 35)混合了timedelta对象和整数类型,Matplotlib没法把这两种不同类型的值统一转换成datetime轴的单位,所以抛出了Failed to convert value(s) to axis units datetime错误。
下面给两种可行的修正方案:
方案1:将timedelta转为天数(整数类型)
直接把delta转换成对应的天数(用delta.days属性),让x轴两个值都是整数,类型统一:
import matplotlib.pyplot as plt import numpy as np from datetime import date d0 = date(2023, 12, 1) d1 = date.today() delta = d1 - d0 mm7g = np.array([82.9, 82.8, 82.9]) # 把timedelta转为天数,和35保持类型一致 plt.plot((delta.days, 35), (mm7g[-1], 78), zorder=0, color='g', linewidth=0.4, ls='--') plt.show()
方案2:用日期对象作为x轴(保留datetime轴显示)
如果需要x轴显示具体日期,把整数35转换成对应的日期(基于d0往后推35天),x轴用两个日期对象,Matplotlib会自动处理datetime轴:
import matplotlib.pyplot as plt import numpy as np from datetime import date, timedelta d0 = date(2023, 12, 1) d1 = date.today() # 计算d0往后35天的日期 d35 = d0 + timedelta(days=35) mm7g = np.array([82.9, 82.8, 82.9]) # x轴传入日期对象,Matplotlib自动识别datetime类型 plt.plot((d1, d35), (mm7g[-1], 78), zorder=0, color='g', linewidth=0.4, ls='--') # 自动旋转日期标签,避免重叠 plt.gcf().autofmt_xdate() plt.show()
方案1适合只需要展示天数差值的场景,方案2适合需要在x轴显示具体日期的需求,根据你的实际情况选择即可。
内容的提问来源于stack exchange,提问作者vecchiemaniere
相关产品推荐
相关产品推荐

