LoginSignup
4
5

More than 3 years have passed since last update.

【matplotlib基礎】第2軸を持つグラフを描画する

Posted at

概要

複数のグラフを比較したいときに,グラフを重ねて表示すればふつうの場合は比較できますが,比較したいグラフのスケールがあまりにも違いすぎるときは,比較がしづらいですよね.
そんな時に使うのが,第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()

実行結果は以下のようになります.

graph_2axis.png

解説

ポイントは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軸をもつグラフはたまに必要になりますよね.位相差を確認したいときなど?
コードに関して建設的なフィードバックなどあればコメントをいただけると助かります.

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5