日付に対して情報をプロットしようとしています。 「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:year is out of range」です。解決策はありますか?
@KyssTaoが言っているように、help(dates.num2date)
は、x
が0001-01-01からの日数に1を加えた浮動小数点数でなければならないことを示しています。したがって、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'
これを行うには、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()
結果: