はじめに
データ可視化では、異なる測定単位の複数の変数を同じグラフにプロットする必要がよくあります。これを達成する一般的な方法の 1 つは、複数の y 軸を使用することです。ここでは、各 y 軸が異なる変数に対応します。この実験では、Matplotlib を使用して複数の y 軸を持つグラフを作成する方法を学びます。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
時々、Jupyter Notebook が読み込み終了するまで数秒待つ必要があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
必要なライブラリをインポートする
まず、必要なライブラリである Matplotlib と NumPy をインポートします。Matplotlib はデータ可視化ライブラリであり、NumPy は Python における数値計算用のライブラリです。
import matplotlib.pyplot as plt
import numpy as np
グラフと軸のオブジェクトを作成する
Matplotlib における単一のプロットを表すグラフと軸のオブジェクトを作成します。
fig, ax = plt.subplots()
双子の y 軸を追加する
twinx メソッドを使用して、プロットに双子の y 軸を追加します。これにより、プロットの右側に新しい y 軸が作成されます。
twin1 = ax.twinx()
双子の y 軸の位置を設定する
双子の y 軸の位置を set_position メソッドを使って設定します。これにより、双子の y 軸を元の y 軸の右側に移動させます。
twin1.spines.right.set_position(("axes", 1.2))
プロットにデータを追加する
plot メソッドを使ってプロットにデータを追加します。異なる y 軸を持つ 3 つの線をプロットに追加します。
p1, = ax.plot([0, 1, 2], [0, 1, 2], "C0", label="Density")
p2, = twin1.plot([0, 1, 2], [0, 3, 2], "C1", label="Temperature")
p3, = twin2.plot([0, 1, 2], [50, 30, 15], "C2", label="Velocity")
ただし、元の英文では twin2 が定義されていません。もし twin2 が定義されていないままのまま翻訳すると、意味が通じなくなるので、もしかして twin1 が 2 回登場しているのが間違いではないかと思われます。もしそうであれば、上記の翻訳は正しくなります。もし twin2 が本来存在するものであれば、その定義が必要になります。
軸の範囲とラベルを設定する
set メソッドを使って各 y 軸の範囲とラベルを設定します。また、set_color メソッドを使って、ラベルの色を線の色と一致させます。
ax.set(xlim=(0, 2), ylim=(0, 2), xlabel="Distance", ylabel="Density")
twin1.set(ylim=(0, 4), ylabel="Temperature")
twin2.set(ylim=(1, 65), ylabel="Velocity")
ax.yaxis.label.set_color(p1.get_color())
twin1.yaxis.label.set_color(p2.get_color())
twin2.yaxis.label.set_color(p3.get_color())
ただし、このコードでは twin2 が定義されていません。もし twin2 が定義されていないままのまま翻訳すると、意味が通じなくなるので、もしかして twin1 が 2 回登場しているのが間違いではないかと思われます。もしそうであれば、上記の翻訳は正しくなります。もし twin2 が本来存在するものであれば、その定義が必要になります。
目盛りの色を設定する
各 y 軸の目盛りの色をラベルの色と一致させます。
ax.tick_params(axis='y', colors=p1.get_color())
twin1.tick_params(axis='y', colors=p2.get_color())
twin2.tick_params(axis='y', colors=p3.get_color())
ただし、このコードでは twin2 が定義されていません。もし twin2 が定義されていないままのまま翻訳すると、意味が通じなくなるので、もしかして twin1 が 2 回登場しているのが間違いではないかと思われます。もしそうであれば、上記の翻訳は正しくなります。もし twin2 が本来存在するものであれば、その定義が必要になります。
プロットに凡例を追加する
legend メソッドを使ってプロットに凡例を追加します。線オブジェクトのリストを handles パラメータとして渡します。
ax.legend(handles=[p1, p2, p3])
プロットを表示する
show メソッドを使ってプロットを表示します。
plt.show()
まとめ
この実験では、Matplotlib を使って複数の y 軸を持つグラフを作成する方法を学びました。グラフと軸のオブジェクトを作成し、双子の y 軸を追加し、双子の y 軸の位置を設定し、プロットにデータを追加し、軸の範囲とラベルを設定し、目盛りの色を設定し、プロットに凡例を追加し、そしてプロットを表示しました。この手法は、同じグラフ上で異なる測定単位の変数を比較する際に役立つ場合があります。