matplotlibでx軸の時刻情報をフォーマットする

久しぶりに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便利やね。

参考

ありがとうございました。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次