一つのグラフに複数のデータを描画したとき、凡例(legend)の表示をデータごとに分けたくなった。
get_legend_landles_labels()という関数が用意されていて、handleとlabelを取得できる。ちなみにhandleとlabelというのはこれ。
hans, labs = ax1.get_legend_handles_labels()
このhans、labsの中にそれぞれのデータの凡例情報がリストで格納されているので、対応するデータを指定すると一部だけを凡例にすることが出来る。
ax1.legend(handles=hans[:1], labels=labs[:1],loc='upper right')#y1の凡例
ax1.legend(handles=hans[1:], labels=labs[1:],loc='upper left')#y2の凡例
最後に両方表示する時にはちょっと工夫が必要で、凡例は最後に指定したものでうわあ期されてしまうので、y1とy2の凡例をl1,l2として、最後にl1を追加し直す、という操作が必要だった。
l1 = ax1.legend(handles=hans[:1], labels=labs[:1],loc='upper right')#y1の凡例をl1に l2 = ax1.legend(handles=hans[1:], labels=labs[1:],loc='upper left')#y2の凡例をl2に ax1.add_artist(l1)#凡例は最後に指定したものだけが表示されるので、l1を改めて追加
これを全部まとめるとこうなりました。
import numpy as np import matplotlib.pyplot as plt y1 = np.array([1, 2, 3, 4]) y2 = np.array([4, 3, 2, 1]) fig = plt.figure(figsize=(3, 3), facecolor="white") ax1 = fig.add_subplot(111) ax1.plot(y1,y1, label="y1") ax1.plot(y1,y2, label="y2") hans, labs = ax1.get_legend_handles_labels()#凡例のデータを取得する。 l1 = ax1.legend(handles=hans[:1], labels=labs[:1],loc='upper right')#y1の凡例をl1に l2 = ax1.legend(handles=hans[1:], labels=labs[1:],loc='upper left')#y2の凡例をl2に ax1.add_artist(l1)#凡例は最後に指定したものだけが表示されるので、l1を改めて追加 plt.show()