matplotlibで書いたグラフにラベルを付ける
matplotlibで久しぶりにグラフを描く。
複数の線を描くので、線ごとにラベルを付けたかったのだが、label='...'をplot(...)の中に加えるだけでは表示されず、あれこれ迷う。簡易コードを書いて2時間ぐらい奮闘し、やっとlegendで表示位置を指定しなければ書かれないことに気付く。
そういえば、過去にも同じことを悩んだことを思い出した。二度目だ。でも、三度目はないな。
テストするために作った簡易コードを示す。
import wx import matplotlib from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg class CheckerFrame: def __init__(self, pnl): self.p = pnl num = 1 # 色を指定するための数値 figure = matplotlib.figure.Figure() self.canvas = FigureCanvasWxAgg(self.p, wx.ID_ANY, figure) self.plot1 = figure.add_subplot(211, xlabel='X', ylabel='Y') self.nval = [1, 2, 3, 4, 5, 6, 7] self.rval = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0] freq = ['1', '2', '3', '4', '5'] clr = ['b','g','r','c','m','y','k'] self.plot1.plot(self.nval, self.rval, '-', color=clr[num%len(clr)], label='[Hz]') # label=で文字列を指定 self.plot1.legend(loc='upper right') # どこにラベルを表示するか。 self.canvas.draw() class MyApp(wx.PySimpleApp): def OnInit(self): Frm = wx.Frame(None, -1, 'Title', size=(400, 300)) self.p = wx.Panel(Frm, -1) CheckerFrame(self.p) Frm.Show() return True app = MyApp() app.MainLoop()
これで図を描くと、下のようになる。
ラベル位置は、locに文字列か数値を指定すればよい。指定できるのは下表の通り。
文字列 | 番号 |
---|---|
upper right | 1 |
upper left | 2 |
lower left | 3 |
lower right | 4 |
right | 5 |
center left | 6 |
center right | 7 |
lower center | 8 |
upper center | 9 |
center | 10 |