[matplotlib] 33. 異なるスケールを持つ2軸グラフを作成する方法(secondary_xaxis)

matplotlib

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

コード

解説

はじめに

ここで紹介する2軸グラフは、一般的な2軸グラフとは異なります。通常の2軸グラフは、スケールの異なる2つのデータを同時に表示するために左右の軸をそれぞれ設定し、1つのグラフにまとめるものです。一方、この記事で説明する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’に設定することで、第2のy軸をグラフの右側に表示しています。

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

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

参考

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

コメント