#概要
複数のグラフを比較したいときに,グラフを重ねて表示すればふつうの場合は比較できますが,比較したいグラフのスケールがあまりにも違いすぎるときは,比較がしづらいですよね.
そんな時に使うのが,第2軸を持つグラフです.
スケールの異なるグラフの他,全く違う量を並べて表示したい時にも使いますね.雨温図とかは典型的な例でしょうか?
今回は,そんな第2軸を持つグラフを描画していきます.
#動作環境
- Windows10(64bit)
- Python 3.7.2
#コード
では,早速実装していきましょう.
graph_2axis.py
"""第2軸をもつグラフを描画するプログラム"""
import numpy as np
import matplotlib.pyplot as plt
# figure()でグラフを描画する領域を確保,figというオブジェクトにする.
fig = plt.figure()
# add_subplot()でグラフを描画する領域を追加する.引数は行,列,場所
ax1 = fig.add_subplot(1, 1, 1)
ax2 = ax1.twinx() # x軸を共有
t = np.linspace(0, 10, 1000)
y1 = np.sin(t)
y2 = 10*np.cos(t)
c1, c2 = "blue", "red" # 各プロットの色
l1, l2 = "sin", "10cos" # 各ラベル
# 1つ目のグラフを描画
ax1.set_xlabel('t') #x軸ラベル
ax1.set_title(r"$\sin(x)$ and 10$\cos(x)$") #グラフタイトル
ax1.grid() #罫線
ax1.plot(t, y1, color=c1, label=l1)
h1, l1 = ax1.get_legend_handles_labels()
# 2つ目のグラフを描画
ax2.plot(t, y2, color=c2, label=l2)
h2, l2 = ax2.get_legend_handles_labels()
ax1.legend(h1+h2, l1+l2, loc='upper right') # ax1とax2の凡例のhandlerとlabelのリストを結合
plt.show()
実行結果は以下のようになります.
#解説
ポイントは3つです.
- x軸の共有
まずは,x軸を共有させます.
ax2 = ax1.twinx()
- handlerとlabelの取得
凡例を表示するために,handlerとlabelを取得します.
h1, l1 = ax1.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
- 凡例の作成
ax1とax2の凡例のhandlerとlabelのリストを結合して,凡例を作成します.
ax1.legend(h1+h2, l1+l2, loc='upper right')
#まとめ
いかがだったでしょうか?
第2軸をもつグラフはたまに必要になりますよね.位相差を確認したいときなど?
コードに関して建設的なフィードバックなどあればコメントをいただけると助かります.