Bus errorとSegmentation faultに困ったら見るブログ

物理の研究者による日々の研究生活のメモ書きです ( python/emacs/html/Japascript/シェルスクリプト/TeX/Mac/C言語/Linux/git/tmux/R/ポケモンGO)

【python3, matplotlib】プロットのx軸を日付にしたい + 日付データをcsvから読み込む

まずはcsvから日付の部分を読み込む
日付データは 2022/03/28 というフォーマットになっている
これをdatetime型で読み込めば良さそうだけど、他の部分が実数で読み込まないといけないのでこういう実装にしてる

データを読み込んで文字列にする

/ を - に置換

datetime型として読み込む
本当はこのあとnumpyに戻したかったけど、そうするとdatetime型じゃなくなるので
しょうがないので、リストで扱うことに(ここでハマった。)

fname="hoge.csv"
if os.path.exists(fname):
a = np.loadtxt(fname, unpack=True, dtype="unicode", delimiter=',', skiprows=1)

mmdd=[]
data["date"] = a[1].astype(str)
tmp = np.char.replace(data["date"], "/", "-")
for (i, x) in enumerate(tmp):
mmdd.append(datetime.strptime(x, '%Y-%m-%d'))
# 時間要素があればここを書き換えれば良いと思う・・・

data["T"] = a[2].astype(np.float64)


これさえできればあとは

plt.plot(mmdd, data1)

みたいな感じでプロットすれば良いと思う

1週間ごとに点をx軸に打ちたいときは

plt.gca().xaxis.set_major_locator(mdates.DayLocator(interval=7))
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter("%m-%d"))

これはpltではなくsubplotなどでaxになっている時は、

ax.xaxis.set_major_locator(mdates.DayLocator(interval=7))
ax.xaxis.set_major_formatter(mdates.DateFormatter("%m-%d"))

でOK

matplotlibで忘れがちな文法まとめ #Python - Qiita


datetime64

datetime64
という型もあるらしくて、そっちで読み込もうとしてみたが、読み込んだあとの取り回しがまったくわからずに諦めた・・・

x軸の日付を範囲指定してプロットする範囲を制限したい時

from datetime import datetime
xmin='2022-03-28'
xmax='2022-06-01'
xmin = datetime.strptime(xmin, '%Y-%m-%d')
xmax = datetime.strptime(xmax, '%Y-%m-%d')
plt.xlim([xmin,xmax])