日付を x 軸としてグラフをプロットしようとしています。これは問題なくプロットされますが、目盛りがデータ ポイントと一致しません。
from datetime import datetime
import pylab as p
from matplotlib.dates import date2num, num2date
scores = [
(datetime.strptime("2013-08-07T14:00", "%Y-%m-%dT%H:%M"), 1280),
(datetime.strptime("2013-08-07T15:00", "%Y-%m-%dT%H:%M"), 1272),
(datetime.strptime("2013-08-07T16:00", "%Y-%m-%dT%H:%M"), 1252),
(datetime.strptime("2013-08-07T17:00", "%Y-%m-%dT%H:%M"), 1293),
(datetime.strptime("2013-08-07T18:00", "%Y-%m-%dT%H:%M"), 1258),
(datetime.strptime("2013-08-07T19:00", "%Y-%m-%dT%H:%M"), 1240),
(datetime.strptime("2013-08-07T20:00", "%Y-%m-%dT%H:%M"), 1287),
(datetime.strptime("2013-08-07T21:00", "%Y-%m-%dT%H:%M"), 1241),
(datetime.strptime("2013-08-07T22:00", "%Y-%m-%dT%H:%M"), 1286),
(datetime.strptime("2013-08-07T23:00", "%Y-%m-%dT%H:%M"), 1237),
(datetime.strptime("2013-08-08T00:00", "%Y-%m-%dT%H:%M"), 1269),
(datetime.strptime("2013-08-08T01:00", "%Y-%m-%dT%H:%M"), 1269),
(datetime.strptime("2013-08-08T02:00", "%Y-%m-%dT%H:%M"), 1258),
(datetime.strptime("2013-08-08T03:00", "%Y-%m-%dT%H:%M"), 1259),
(datetime.strptime("2013-08-08T04:00", "%Y-%m-%dT%H:%M"), 1265),
(datetime.strptime("2013-08-08T05:00", "%Y-%m-%dT%H:%M"), 1225),
(datetime.strptime("2013-08-08T06:00", "%Y-%m-%dT%H:%M"), 1251),
(datetime.strptime("2013-08-08T07:00", "%Y-%m-%dT%H:%M"), 1297),
(datetime.strptime("2013-08-08T08:00", "%Y-%m-%dT%H:%M"), 1244),
(datetime.strptime("2013-08-08T09:00", "%Y-%m-%dT%H:%M"), 1283),
(datetime.strptime("2013-08-08T10:00", "%Y-%m-%dT%H:%M"), 1253),
(datetime.strptime("2013-08-08T11:00", "%Y-%m-%dT%H:%M"), 1305),
(datetime.strptime("2013-08-08T12:00", "%Y-%m-%dT%H:%M"), 1284),
(datetime.strptime("2013-08-08T13:00", "%Y-%m-%dT%H:%M"), 1318),
(datetime.strptime("2013-08-08T14:00", "%Y-%m-%dT%H:%M"), 454),
]
if __name__ == "__main__":
fig = p.figure()
ax = fig.add_subplot(1,1,1)
x = [date2num(date) for (date, value) in scores]
y = [value for (date, value) in scores]
ax.plot(x, y, 'r-x')
ticks = [num2date(t) for t in x[0::4]]
ax.set_xticklabels([t.strftime("%H:%M") for t in ticks], rotation="45")
p.savefig("line_plot.png")
これにより、次のグラフが出力として生成されます。
最初のデータ ポイントは 14:00 に開始する必要があり、3 時間後に表示されます。データ ポイント間の間隔は正しいように見えますが、開始オフセットがずれているだけです。なぜこれをやっているのですか?
更新:
削除されたように見えるコメントに基づいて、plot_date
何とか見逃したメソッドを調べました...コードを次のように変更しました。これにより、目盛りが適切な場所にある素敵なグラフが得られます。
if __name__ == "__main__":
fig = p.figure()
ax = fig.add_subplot(1,1,1)
x = [date2num(date) for (date, value) in scores]
y = [value for (date, value) in scores]
ax.plot_date(x, y, 'r-x')
fig.autofmt_xdate()
p.savefig("line_plot.png")