【Python】凡例の位置を画像座標で指定する

グラフの凡例を画像座標で指定したいときは、下記のように座標変換する。

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(211) #テストのためにグラフをずらす.

fig_posX = 0.5 #画像座標X
fig_posY = 0.75 #画像座標Y
ax.set_xlim([-10, 20]) #テストのためにx軸座標の範囲を変更。

#データプロット
ax.plot(0, 0, color='red', label='1')
ax.plot(1, 1, color='blue', label='2')

#figの座標からグラフのBBox座標に変換
ax_zahyouX = (fig_posX - ax.axes.get_position().x0) / ax.axes.get_position().width
ax_zahyouY = (fig_posY - ax.axes.get_position().y0) / ax.axes.get_position().height
print(ax_zahyouX, ax_zahyouY)

#凡例を表示
ax.legend(bbox_to_anchor=(ax_zahyouX, ax_zahyouY), loc='upper left')
fig.text(fig_posX, fig_posY, 'TEXT') #上の命令と同じ位置に表示される(基点は異なる)。

#グラフ表示
plt.show()

f:id:gushigo:20180826003424p:plain

軸タイトルや軸の値を変更してグラフを作ると、グラフの領域がずれることがある。
凡例などの位置を固定したいときはこんな感じでやるしかない?
ほかにもっといいやり方はあるかも。