1
0

More than 1 year has passed since last update.

ObsPyで読み込んだ地震波形データをMatplotlibで描画してみよう

Last updated at Posted at 2023-01-02

本稿の目標

以前の記事で、読み込んだ波形を描画するのは、単に

st[0].plot()

とするだけでOKだとご紹介しました。これはこれで便利なのですが、matplotlibを使って、工夫を凝らした図を作りたいということもあるでしょう。そこで、matplotlibを使って簡単な図を作ります。単一の波形を描画した上で、目盛りの数値の書式の指定、軸ラベルやタイトル、その他任意の印字をします。なお、複数の波形を使った描画については、回を改めて紹介しようと思います。

波形の描画

波形データは、st[0].dataに1次元のnumpy.ndarrayの形で入っています。例えば、以下のようにすれば、図が描けます:

import matplotlib.pyplot as plt
plt.plot(st[0].data)
plt.show()

matplotlib_plot.png

横軸を時間にする

ただ、これだと横軸がサンプル番号になってしまいます。横軸をデータ開始時からの時間にするには、例えば、以下のようにすれば良いです。

import numpy as np
plt.plot(np.arange(st[0].stats.npts) * st[0].stats.delta, st[0].data)
plt.show()

matplotlib_plot2.png

指数表記にする

y軸に位取りのための0がたくさんあって見づらいので、表記を変えたいと思います。

fig = plt.figure()
plt.ticklabel_format(style="sci", axis="y", scilimits=(0,0))
plt.plot(np.arange(st[0].stats.npts) * st[0].stats.delta, st[0].data)
plt.show()

matplotlib_plot3.png

軸にラベルをつける

両軸にラベルをつけたくなった場合は、以下のようにしてください:

fig = plt.figure()
plt.plot(np.arange(st[0].stats.npts) * st[0].stats.delta, st[0].data)
plt.xlabel("time [s]")
plt.ylabel("velocity [m/s]")
plt.ticklabel_format(style="sci", axis="y", scilimits=(0,0))
plt.show()

matplotlib_plot4.png

いろいろ盛り込んでみました

なんやかんやありまして、いろいろな要素を盛り込んだ図ができました。何をやったかは説明しませんが、おそらく推測可能だろうと思います。詳しくはマニュアルをご参照下さい。

fig = plt.figure()
plt.plot(np.arange(st[0].stats.npts) * st[0].stats.delta, st[0].data, color='r')
plt.xlabel("time [s]")
plt.ylabel("velocity [m/s]")
plt.title(st[0].stats.station + " " + st[0].stats.channel)
plt.ticklabel_format(style="sci", axis="y", scilimits=(0,0))
plt.text(40,1e-5,"P",fontdict={'fontsize':'14'})
plt.text(46,1e-5,"S",fontdict={'fontsize':'14', 'weight':'bold'})
plt.xlim(30,60)
plt.ylim(-6e-4,6e-4)
plt.show()

matplotlib_plot5.png

また機会を改めて、複数の波形を一度にプロットしてみたりしたいと思います。では。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0