Matplotlib を使った複数の Y 軸のプロット作成

PythonPythonBeginner
今すぐ練習

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

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

データ可視化では、異なる測定単位の複数の変数を同じグラフにプロットする必要がよくあります。これを達成する一般的な方法の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軸の位置を設定し、プロットにデータを追加し、軸の範囲とラベルを設定し、目盛りの色を設定し、プロットに凡例を追加し、そしてプロットを表示しました。この手法は、同じグラフ上で異なる測定単位の変数を比較する際に役立つ場合があります。