はじめに
この実験の目的は、左右の y 軸に 2 つの目盛りを表示する方法を示すことです。この例では、華氏と摂氏の目盛りを使用します。第 1 軸に応じて第 2 軸を更新するためのコールバックとしてクロージャ関数を使用します。
VM のヒント
VM の起動が完了した後、左上隅をクリックして ノートブック タブに切り替え、Jupyter Notebook を使用して練習します。
場合によっては、Jupyter Notebook が読み込み完了するまで数秒待つ必要があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題が発生した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
必要なライブラリをインポートする
まず、numpy と matplotlib.pyplot ライブラリをインポートする必要があります。
import matplotlib.pyplot as plt
import numpy as np
華氏を摂氏に変換する関数を定義する
次に、華氏の温度を摂氏に変換する関数を定義します。
def fahrenheit2celsius(temp):
"""
Returns temperature in Celsius given Fahrenheit temperature.
"""
return (5. / 9.) * (temp - 32)
2 番目の軸を更新する関数を定義する
第 1 軸に応じて第 2 軸を更新するためのコールバックとして登録するためのクロージャ関数を定義します。
def convert_ax_c_to_celsius(ax_f):
"""
Update second axis according to first axis.
"""
y1, y2 = ax_f.get_ylim()
ax_c.set_ylim(fahrenheit2celsius(y1), fahrenheit2celsius(y2))
ax_c.figure.canvas.draw()
グラフを作成する
次に、matplotlib.pyplot の subplots() 関数を使って 2 つの y 軸付きのグラフを作成します。また、最初の軸の ylim_changed イベントを convert_ax_c_to_celsius() 関数に接続します。
fig, ax_f = plt.subplots()
ax_c = ax_f.twinx()
ax_f.callbacks.connect("ylim_changed", convert_ax_c_to_celsius)
データをプロットする
最初の軸の plot() 関数を使ってデータをプロットします。
ax_f.plot(np.linspace(-40, 120, 100))
軸の範囲とラベルを設定する
x 軸の範囲を (0, 100) に設定し、y 軸のラベルとタイトルを設定します。
ax_f.set_xlim(0, 100)
ax_f.set_title('Two scales: Fahrenheit and Celsius')
ax_f.set_ylabel('Fahrenheit')
ax_c.set_ylabel('Celsius')
グラフを表示する
最後に、matplotlib.pyplot の show() 関数を使ってグラフを表示します。
plt.show()
まとめ
この実験では、Python の Matplotlib を使って左右の y 軸に 2 つの目盛りを表示する方法を学びました。クロージャ関数を使ってコールバックとして登録し、最初の軸に応じて 2 番目の軸を更新しました。これは、異なる単位の 2 セットのデータをプロットしたい場合に便利です。