我正在尝试根据日期绘制信息。我有一个日期列表,格式为“01/02/1991”。
我通过执行以下操作转换它们:
x = parser.parse(date).strftime('%Y%m%d'))
这使 19910102
然后我尝试使用num2date
import matplotlib.dates as dates
new_x = dates.num2date(x)
绘图:
plt.plot_date(new_x, other_data, fmt="bo", tz=None, xdate=True)
但是我收到了一个错误。它说“ValueError:年份超出范围”。有解决方案?
发布于 2018-09-25 10:06:23
作为@KyssTao一直说,help(dates.num2date)
说,x
已经是一个浮动以来0001-01-01加一个给人的天数。因此,19910102
不是1991年1月2日,因为如果您从0001-01-01算起19910101天,您将获得54513年或类似的东西(除以365.25,一年中的天数)。
datestr2num
改为使用(见help(dates.datestr2num)
):
new_x = dates.datestr2num(date) # where date is '01/02/1991'
发布于 2018-09-25 10:59:08
您可以更简单地使用plot()
而不是使用plot_date()
。
首先,将您的字符串转换为Python的实例datetime.date
:
import datetime as dt
dates = ['01/02/1991','01/03/1991','01/04/1991']
x = [dt.datetime.strptime(d,'%m/%d/%Y').date() for d in dates]
y = range(len(x)) # many thanks to Kyss Tao for setting me straight here
然后情节:
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%m/%d/%Y'))
plt.gca().xaxis.set_major_locator(mdates.DayLocator())
plt.plot(x,y)
plt.gcf().autofmt_xdate()
结果:
https://stackoverflow.com/questions/-100002718
复制相似问题