[matplotlib] 33. 異なるスケールをもつ2軸グラフ(secondary_xaxis)

matplotlib

上下のx軸に度 (角度)とラジアンを表示

コード

解説

はじめに

ここで、紹介する2軸グラフは普通の2軸グラフとは異なる。普通の2軸グラフは2つのスケールの異なるデータを同時に表示するために、左と右の軸をそれぞれ設定し、強引にまとめて表示することである。ここでの2軸グラフは、一つのデータを異なるスケールの軸で表現するグラフである。その詳細を解説する。なお、この機能はmatplotlib 3.1.0の機能であり、今後変更される可能性がある。

モジュールのインポート

図の表示

constrained_layoutをTrueにすることで、ラベルの重なりなどを防ぎ、きれいなグラフにしてくれる。
x,yでcos波データを生成してプロットし、軸ラベルとタイトルの設定もしている。

第2軸の設定

x軸の第2軸はax.secondary_xaxis()で設定する。’top’はlocationのことであり、上のx軸で第2軸が設定される。functionsで、変換関数と逆変換関数を設定する。ここでは、deg2rad(x)で度からラジアンに変換し、 rad2deg(x)でラジアンから度に変換する関数を定義している。

上下のx軸に周波数と周期を表示

コード

解説

図の表示

ax.loglog(x, y)により、x軸、y軸がともに対数表示となる両対数グラフが表示される。

第2軸の設定

functionsで変換関数と逆変換関数を設定する。ここでは、forward(x)で周波数から周期へ変換し、 inverse(x)でその逆変換を定義している。

x軸が対数表示なので、第2x軸も対数表示となる。

上下のx軸にメートルとフィートを表示

コード

解説

図の表示

第2軸の設定

functionsで変換関数と逆変換関数を設定する。ここでは、mtof(x)でメートルからフィートへ変換し、 ftom(x)でその逆変換を定義している。

上下のx軸に日時と経過時間、左右のy軸に摂氏と華氏を表示

コード

解説

データの生成

datesは2018年1月1日から6時間刻みのデータで、temperatureは20℃にばらつきを加えたデータとなっている。

図の表示

plt.xticks(rotation=70)により、x軸のラベルを傾けて表示している。

第2軸の設定

x軸

functionsで変換関数と逆変換関数を設定する。ここでは、date2yday(x)で日時から最初の時間からの経過時間へと変換し、 yday2date(x)でその逆変換を定義している。
date2numは、日時オブジェクトをMatplotlibの日付に変換するメソッドとなっている。

y軸

functionsで変換関数と逆変換関数を設定する。ここでは、CtoF(x)でセルシウス温度から華氏温度へ変換し、 FtoC(x)でその逆変換を定義している。

locationを’right’とすることで第2y軸を右に表示している。

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

参考

Secondary Axis — Matplotlib 3.1.0 documentation
Constrained Layout Guide — Matplotlib 3.1.0 documentation
matplotlib.dates — Matplotlib 3.1.0 documentation

コメント