Matplotlib を使って二重 y 軸のプロットを作成する

Beginner

This tutorial is from open-source community. Access the source code

はじめに

このチュートリアルでは、Matplotlib を使って 2 つの y 軸を持つプロットを作成する方法を学びます。このプロットは、異なる尺度で異なる測定単位の 2 セットのデータを表示します。この種のプロットは、直接比較できない変数間の関係を視覚化するために科学研究で一般的に使用されます。

VM のヒント

VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。

時々、Jupyter Notebook が読み込み終了するまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。

学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。私たちは迅速に問題を解決いたします。

ライブラリのインポート

まず、必要なライブラリをインポートする必要があります。このプロットを作成するために、Matplotlib とその parasite_axes モジュールを使用します。

import matplotlib.pyplot as plt
import matplotlib.transforms as mtransforms
from mpl_toolkits.axes_grid1.parasite_axes import HostAxes

データの定義

次に、プロットするデータを定義する必要があります。この例では、名前、角秒運動量、角秒運動量誤差、距離の 4 つの変数を持つ一連の観測データがあります。角秒運動量を線速度に変換し、それを観測データの FWHM(半値全幅)に対してプロットします。

obs = [["01_S1", 3.88, 0.14, 1970, 63],
       ["01_S4", 5.6, 0.82, 1622, 150],
       ["02_S1", 2.4, 0.54, 1570, 40],
       ["03_S1", 4.1, 0.62, 2380, 170]]

## 角秒運動量から線速度への変換係数
pm_to_kms = 1./206265.*2300*3.085e18/3.15e7/1.e5

プロットの作成

ここでは、parasite_axes モジュールの HostAxes と twin() 関数を使ってプロットを作成します。HostAxes はメインプロットを作成するために使用し、twin() は 2 次 y 軸を作成するために使用します。

fig = plt.figure()

## HostAxes オブジェクトを作成
ax_kms = fig.add_subplot(axes_class=HostAxes, aspect=1)

## 変換された座標で 2 次 y 軸を作成
aux_trans = mtransforms.Affine2D().scale(pm_to_kms, 1.)
ax_pm = ax_kms.twin(aux_trans)

## データをプロット
for n, ds, dse, w, we in obs:
    time = ((2007 + (10. + 4/30.)/12) - 1988.5)
    v = ds / time * pm_to_kms
    ve = dse / time * pm_to_kms
    ax_kms.errorbar([v], [w], xerr=[ve], yerr=[we], color="k")

## 軸のラベルを設定
ax_kms.axis["bottom"].set_label("Linear velocity at 2.3 kpc [km/s]")
ax_kms.axis["left"].set_label("FWHM [km/s]")
ax_pm.axis["top"].set_label(r"Proper Motion [$''$/yr]")

## 2 次 y 軸の目盛りラベルを非表示にする
ax_pm.axis["right"].major_ticklabels.set_visible(False)

## プロットの範囲を設定
ax_kms.set_xlim(950, 3700)
ax_kms.set_ylim(950, 3100)

プロットの表示

最後に、plt.show() 関数を使ってプロットを表示します。

plt.show()

まとめ

このチュートリアルでは、Matplotlib を使って 2 つの y 軸を持つプロットを作成する方法を学びました。データの定義方法、プロットの作成方法、およびプロットの表示方法を学びました。この種のプロットは、直接比較できない変数間の関係を視覚化するのに役立ちます。