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]
スポンサーリンク