2つのy軸を持つグラフを作成するサンプルコードを紹介します。
2つのy軸をもつグラフの書き方
まずは単純に2つのy軸を持つグラフを描いてみます。
以下のようなグラフを生成するサンプルコードを紹介します。
import numpy as np import matplotlib.pyplot as plt x = np.arange(10) # => array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) y = x**2 # => array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81]) y2 = np.sqrt(x) # => array([0. , 1. , 1.41421356, 1.73205081, 2. ,2.23606798, 2.44948974, 2.64575131, 2.82842712, 3. ]) fig, ax1 = plt.subplots() ax1.plot(x, y, label="y") ax2 = ax1.twinx() # これが重要 ax2.plot(x, y2, label="y2") plt.show()
ax1.twinx()によってx軸を共有することができます。
これによってax1とax2をくっつけることができます。
凡例の調整
ただ上の通りコードでただ凡例を表示すると、以下のように正しく表示されません。
それを以下のコードで解決することができます。
import numpy as np import matplotlib.pyplot as plt x = np.arange(10) # => array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) y = x**2 # => array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81]) y2 = np.sqrt(x) # => array([0. , 1. , 1.41421356, 1.73205081, 2. ,2.23606798, 2.44948974, 2.64575131, 2.82842712, 3. ]) fig, ax1 = plt.subplots() ax1.plot(x, y, label="y") ax2 = ax1.twinx() ax2.plot(x, y2, label="y2") # 以下追加部分 # ----------------------------------------- lines_1, labels_1 = ax1.get_legend_handles_labels() lines_2, labels_2 = ax2.get_legend_handles_labels() lines = lines_1 + lines_2 labels = labels_1 + labels_2 ax1.legend(lines, labels) # ----------------------------------------- plt.show()
ラベル等を1つにまとめて表示しています。