Python/matplotlibで2軸グラフを作る
Pythonでmatplotlibライブラリを使って2軸グラフを作ります。
いくつかちょっとしたテクニックを使う必要があります。必要な処置は以下の通り。
- 第一軸(ax1)と第二軸(ax2)を作って関連付ける。
- 重ね順として折れ線グラフを前面に。(そうしないと棒グラフに折れ線が隠れてしまう)
- 折れ線グラフの背景を透明に。(そうしないと重ね順が後ろに回った棒グラフが消えてしまう)
作ったグラフはこんな感じです。
[ad#top-1]
ソースコードは以下のとおりです。
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()
[ad#ad-1]
スポンサーリンク
