第7章 震源メカニズム解
地図上への震源球のプロット
(v0.12.0記)
地図上に震源球をプロットするには,\texttt{pygmt.Figure.meca}メソッドを用いる
(https://www.pygmt.org/dev/api/generated/pygmt.Figure.meca.html).
fig.meca(
spec = <必須.震源球についての情報>,
scale = <必須.震源球の大きさ>
)
spec引数
ここで震源球の位置やパラメータの情報を与える. pandas.DataFrameなどで与えられるが,pandas.DataFrameで与えるにはカラム名を指定された名前にしなければならなかったりして面倒.
辞書型で与えるのが最も融通が利いて良いだろう. 緯度 (必須),経度 (必須),深さkm はそれぞれ"longitude","latitude","depth"という見出し名で与える. 加えて震源球のパラメータも必須である.
このとき与えるパラメータの組は次のいずれかから選ぶこととなる:
- "aki": strike, dip, rake, magnitude
- "gcmt": strike1, dip1, rake1, strike2, dip2, rake2, mantissa, exponent
- "mt": mrr, mtt, mff, mrt, mrf, mtf, exponent
- "partial": strike1, dip1, strike2, fault_type, magnitude
- "principal_axis": t_value, t_azimuth, t_plunge, n_value, n_azimuth, n_plunge, p_value, p_azimuth, p_plunge, exponent
例えば気象庁の初動発震機構解のカタログの場合,「aki」という組を使うのが良い. この場合はstrike, dip, rake, magnitudeの4つの見出しを使ってパラメータを与える.
加えて,もし震源球の近くにラベルをつけたい場合は,specの中に\texttt{event_name}というデータも追加する.
scale引数
地震のマグニチュードによって,紙面上の震源球の直径を決めるための設定(公式マニュアルでは「radius」(半径) と記されているが,実際は直径の大きさのように思われる). あるマグニチュード基準値(デフォルトではM5)のイベントの震源球のサイズを与える. デフォルトの単位はcmである. 震源球の直径はマグニチュードに比例する.
震源球の設定に関するオプションは次の通り:
- +s: 基準とするマグニチュードの値.デフォルトは5.(ex. \texttt{scale = "0.5c+s4"}: M4のイベントの震源球を0.5cmでプロット)
- +m: これを付けるとマグニチュードによらず,すべての震源球を与えた一定の直径でプロットする.(ex. \texttt{scale = "0.5c+m"})
- +l: これをつけると震源球の大きさの基準がマグニチュードではなく地震モーメントになる.
一方でspecの中身またはFigure.mecaの引数においてevent_nameを与えると,震源球の近くにラベル文字を記すことができる. このときのラベルのフォントの設定もscale引数のオプションで行う:
- +f: フォント設定("
,, ") - +a: フォントの角度.
- +j: フォントの配置(上下方向: TMB; 左右方向: LCR)(ex. \texttt{+jTC}: 震源球の上中央にテキストを配置)
深さによる着色
公式ドキュメントにはdepthとcmapを与えると着色できると書かれているが, v0.12.0で試したところエラーは出ないが出力結果は着色されず デフォルトの白黒の震源球がプロットされてしまう.
例)震源球のプロット.(v0.12.0)
import pygmt
rgn = [138.5,141.5,35,37]
prj = "M6c"
fig = pygmt.Figure()
# 陸,枠のプロット -----------
fig.coast(
land = "grey40",
region = rgn,
projection = prj,
frame = ["agf"],
)
# cmap = pygmt.makecpt(
# cmap = 'viridis',
# series = [0, 150],
# )
# メカニズム解 -----------
fig.meca(
spec = {
"longitude": df.lon,
"latitude": df.lat,
"strike": df.strike1,
"dip": df.dip1,
"rake": df.rake1,
"magnitude": df.M.astype(float),
"event_name": df.time_jst.dt.strftime('
<!-- Y/%m/%d'), -->
},
scale = "0.5c+f5p,,blue+jMR+a30+o0/5p",
pen = '0.5p,black',
compressionfill = "blue",
# depth = df.dep_km.values,
# cmap = cmap,
)
# タイトル -----------
fig.text(
position = "TC",
text = "Focal Mechanisms from JMA catalog",
font = "9p,Helvetica-Bold,black",
offset = "0c/10p",
justify="CB",
no_clip = True,
)
# fig.colorbar(
# position = "JR",
# frame = "a50"
# )
fig.show()
