久しぶりにmatplotlib使ったら完全に忘れている。ちょっと使わないとすぐに忘れてしまうね。
なのでメモ書き。日付と時刻がyyyy/mm/dd HH:MM:SS形式で入ったファイルを読み込んで、x軸に適切な形で表示する。
目次
環境
- python 3.6.5
- matplotlib 2.2.2
- pandas 0.22.0
pandasはファイルの読み込みで使った。
コード
以下のようなデータtest.csvを読み込んで、x軸に時刻、y軸に2列目の数値を表示したグラフを出力する。
2018/05/16 22:00:01,2147564
2018/05/16 22:10:01,2147316
2018/05/16 22:20:01,2147036
2018/05/16 22:30:01,2147036
2018/05/16 22:40:01,2146788
2018/05/16 22:50:01,2146632
2018/05/16 23:00:01,2146168
2018/05/16 23:10:01,2145888
2018/05/16 23:20:01,2146136
2018/05/16 23:30:01,2146012
2018/05/16 23:40:01,2145796
2018/05/16 23:50:01,2145580
2018/05/17 00:00:01,2145332
2018/05/17 00:10:01,2144960
2018/05/17 00:20:01,2144712
2018/05/17 00:30:01,2144152
2018/05/17 00:40:01,2144028
2018/05/17 00:50:01,2143440
2018/05/17 01:00:01,2143316
2018/05/17 01:10:01,2118708
2018/05/17 01:20:01,2118600
2018/05/17 01:30:01,2118244
2018/05/17 01:40:01,2118368
2018/05/17 01:50:01,2118244
2018/05/17 02:00:01,2116176
2018/05/17 02:10:01,2116360
2018/05/17 02:20:01,2116268
2018/05/17 02:30:01,2115804
2018/05/17 02:40:01,2115592
2018/05/17 02:50:01,2115532
2018/05/17 03:00:01,2115160
2018/05/17 03:10:01,2114604
2018/05/17 03:20:01,2105344
2018/05/17 03:30:01,2104820
2018/05/17 03:40:01,2105068
2018/05/17 03:50:01,2104200
2018/05/17 04:00:01,2104356
2018/05/17 04:10:01,2104480
2018/05/17 04:20:01,2103828
2018/05/17 04:30:01,2103828
2018/05/17 04:40:01,2103704
2018/05/17 04:50:01,2103052
2018/05/17 05:00:01,2103084
2018/05/17 05:10:01,2103084
2018/05/17 05:20:01,2102556
2018/05/17 05:30:01,2102680
2018/05/17 05:40:01,2103920
2018/05/17 05:50:01,2103548
以下のようにコードを書く。csvの読み込みはなんでもいいけれど、楽だからpandasを使う。GUI無しを想定しているのでmatplotlib.use("Agg")を使う。
import pandas as pd
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
if __name__ == '__main__':
fname = "test.csv"
df = pd.read_csv(fname,header=None, names=['value'], index_col=0)
df.index = pd.to_datetime(df.index)
# print(df)
fig, ax = plt.subplots()
ax.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d\n%H:%M'))
plt.plot(df.index, df['value'])
plt.savefig(f"{fname}.png")
ax.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d\n%H:%M'))で時刻の表記の仕方をいじる。上のコードだと以下のようになる。

おわり。
どうでもいいけどpython3.6から使えるようになったf-strings便利やね。
参考
ありがとうございました。
コメント