非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

Python/matplotlibで2軸グラフを作る

   

Pythonでmatplotlibライブラリを使って2軸グラフを作ります。

いくつかちょっとしたテクニックを使う必要があります。必要な処置は以下の通り。

  • 第一軸(ax1)と第二軸(ax2)を作って関連付ける。
  • 重ね順として折れ線グラフを前面に。(そうしないと棒グラフに折れ線が隠れてしまう)
  • 折れ線グラフの背景を透明に。(そうしないと重ね順が後ろに回った棒グラフが消えてしまう)

作ったグラフはこんな感じです。

広告

 

ソースコードは以下のとおりです。

import numpy as np
import matplotlib.pyplot as plt

x = np.array([1, 2, 3, 4, 5])
y1 = np.array([18, 19, 34, 99, 95]) #折れ線グラフ用データ
y2 = np.array([23, 16, 75, 62, 91]) #棒グラフ用データ

#第一軸(ax1)と第二軸(ax2)を作って関連付ける
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()

#第一軸を折れ線グラフ、第二軸を棒グラフに
ax1.plot(x, y1, linewidth=2, color="red", linestyle="solid", marker="o", markersize=8, label='line-1')
ax2.bar(x, y2, label='bar-2')

#y軸の範囲 今回は第二軸のみとした
ax2.set_ylim([0,300])

#重ね順として折れ線グラフを前面に。
#そうしないと棒グラフに折れ線が隠れてしまうので。
ax1.set_zorder(2)
ax2.set_zorder(1)

#折れ線グラフの背景を透明に。
#そうしないと重ね順が後ろに回った棒グラフが消えてしまう。
ax1.patch.set_alpha(0)

#凡例を表示(グラフ左上、ax2をax1のやや下に持っていく)
ax1.legend(bbox_to_anchor=(0, 1), loc='upper left', borderaxespad=0.5, fontsize=10)
ax2.legend(bbox_to_anchor=(0, 0.9), loc='upper left', borderaxespad=0.5, fontsize=10)

#グリッド表示(ax1のみ)
ax1.grid(True)

#軸ラベルを表示
plt.xlabel('X-Axis')
ax1.set_ylabel('Y-Axis-1')
ax2.set_ylabel('Y-Axis-2')

#グラフ表示
plt.show()
 

 

広告

 - Python