【matplotlib】凡例を設定する方法【Python】
matplotlibでグラフを作成する際、苦労することが多い凡例の表示位置設定方法を整理しました。
グラフをPythonの標準GUIツールであるTkinter内に表示させる例となっており、matplotlibとnumpyがインストールされていれば利用できます。matplotlibのグラフをTkinter内に表示させる方法については、こちらをご覧ください。
【スポンサーリンク】
凡例の表示方法
Axes
オブジェクトに対して、legend
メソッドを実行することで凡例を表示させることができます。
ax.legend()
実行するとグラフの線種・マーカーとラベルが表示された凡例が出現し、表示位置を指定しない場合はグラフとの重なりが最も少ない位置に自動調整されます。legend
メソッド実行時には様々な凡例に関するパラメータを設定可能です。また、生成されるlegendオブジェクトを用いて、後から表示設定を変更することも可能です。
【スポンサーリンク】
凡例の表示位置設定方法
legend
メソッド実行時にloc
パラメータを設定することで、凡例の表示位置を設定することができます。初期値はbest
となっており、グラフとの重なりが最も少ない位置に自動配置されます。
以下、グラフの左上に凡例を表示させる例となります。
ax.legend(loc="upper left")
legend
オブジェクト生成後に位置設定したい場合は、set_loc
メソッドが使用可能です。
legend = ax.legend()
legend.set_loc("upper left")
またはset
メソッドでパラメータを再設定することも可能です。
legend = ax.legend()
legend.set(loc="upper left")
設定できるlocパラメータは以下の通りです。指定の文字列または数字コードを使用することが可能です。
| 文字列 | 数字コード |
|---|---|
| best | 0 |
| 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 |
【スポンサーリンク】
グラフ領域の外側に凡例を表示させる場合
bbox_to_anchor
を設定することで、グラフ領域の外側に凡例を表示させることが可能です。
bbox_to_anchor
は凡例ボックスの固定位置(座標)を設定するためのパラメータです。グラフ領域の中央部が(0,0)で、右上が(1,1)、左下が(-1,-1)となります。この座標に対して、凡例ボックスのloc
パラメータで設定した位置が固定されることになります。
loc
パラメータはグラフ領域内の凡例表示位置設定しかできませんでしたが、bbox_to_anchor
でグラフ領域外の座標(1以上の座標)を設定することで、グラフ領域の外側に凡例を表示させることが可能となります。
legend = ax.legend(bbox_to_anchor=(1,1))
以下の例ではbbox_to_anchor
を(1, 1)、loc
を"Upper Left"に設定しています。凡例ボックスの左上がグラフ領域の右上端に固定されることになります。
【スポンサーリンク】
凡例表示位置設定ウィンドウ
凡例の位置設定方法の具体例として、凡例の表示/非表示切り替え、固定位置指定、ドラッグ移動可否設定を行うための別ウィンドウを作成しました。
matplotlib legend setting example
実行するとグラフ画面とは別に凡例位置を設定するためのウィンドウが現れ、選択した内容に応じてグラフ画面が更新されて凡例の設定が変化します。
25行目の self.fig = legend.parent.get_figure() で、legend
オブジェクトの親オブジェクト(Axesオブジェクト)を取得し、さらにget_figure
メソッドを用いてFigure
オブジェクトを取得しています。ここで取得したFigure
オブジェクトに対して、64行目でself.fig.canvas.draw()を実行して画面の更新を行っています。

【スポンサーリンク】
オプション一覧
使用頻度の高いlegendオブジェクトのメソッド、パラメータを以下に示します。
| オプション | 説明 |
|---|---|
| loc | 凡例の固定位置の設定。デフォルトでbest。 |
| bbox_to_anchor | 凡例を固定するグラフ領域上の座標の設定。(1,1)でグラフ領域右上(外側)。グラフ領域外に凡例を表示される際に便利。 |
| ncols | 凡例の列設定。デフォルトで1。 |
| draggable | 凡例のドラッグ移動可否設定。デフォルトでFalse。Trueにすると凡例のドラッグ移動が可能となる。 |
| .set | 各種パラメータを再設定するためのメソッド |
【スポンサーリンク】
【tkinter】解像度を調整する方法【Python】
tkinterでアプリを作成した際に、PCシステムとtkinter画面の解像度と一致していないと文字がつぶれてしまいます。 表示をクリアにするために、Python側でシステムの改造度を取得・設定する方法を示します。
【スポンサーリンク】
解像度の設定方法
標準モジュールである「ctypes」モジュールを用いて、PCシステムの解像度を取得・設定することができます。 tkinterの画面を生成する前に、以下のコードを実行して解像度を設定することで、tkinter画面の表示がクリアになります。
ctypes.windll.shcore.SetProcessDpiAwareness(1)
コード例
[how to set system's DPI to tkinter window](https://gist.github.com/vigilantPotato/0df26edf1df969ebdf46968e1da7201b)
解像度設定前後の表示の違い
デスクトップ上ショートカットアプリの紹介【Python】
Pythonで作成したデスクトップショートカットツールを紹介します。知り合いに提供したところ評判が非常に良く、デスクトップ画面がすっきりして、日々の業務効率が非常に向上したと報告をもらっています。
【スポンサーリンク】
準備・注意事項
1.Python3のインストール
pyファイルでの提供になります。Python3がインストールされていることが必要です。 標準モジュールのみで動作するため、手動でのモジュール追加は不要です。
2.スクリプトファイル
以下のリンクから入手ください。必要なファイルは、main.pyとinput_dialog.pyのみです。 両者を同じフォルダ内に保存し、main.pyを実行すると起動します。
https://github.com/vigilantPotato/desktop_shortcut_app
main.pyの拡張子をpywに修正すると、コンソール画面なしで直接実行できるのでお勧めします。また、そのmain.pywのショートカットファイルをスタートアップフォルダに保存しておけば、PC起動時に自動で実行されます。
3.注意事項
個人の使用は無制限ですが、法人内で使用する際は一報ください。
【スポンサーリンク】
機能紹介
1.ショートカットボタンの作成
ボタンのみで構成される、非常にシンプルなショートカットアプリになります。 実行するとモニターの右上端に画面が表示され、"create new"ボタンが生成されます。
create newボタンを押すとショートカットボタン内容を設定するためのダイアログが表示され、ボタンタイトル、ショートカット先のurl、ボタンの背景色、ボタンタイトルの色を設定することができます。
以下、例としてGoogleのホームを開く設定にしました。
OKボタンを押すと設定したボタンが表示され、クリックすると登録されたリンクをデフォルトのブラウザやエクスプローラーで開きます。また、アプリも登録できます。
続けてボタンを作成すると、下側にショートカットボタンが追加されていきます。
2.ショートカットボタンの並び替え
作成したボタンは、ドラッグにより順番を並び替えることが可能です。
3.ショートカットボタンの削除
ボタンをドラッグで画面の左側に移動させると、ボタンは削除されます。(削除前に以下の確認のダイアログが表示されます。)
4.ショートカットボタンの修正
ボタンをドラッグで画面の右側に移動させると、ボタンの情報を更新することができます。
5.サブウィンドウの作成
以下の様にリンク先(url)を空欄にしてボタンを作成すると、サブウィンドウを表示するボタンになります。
作成したボタンをクリックすると、メイン画面の左側にサブウィンドウが表示されます。
サブウィンドウ中にもショートカットボタンを作成することができます。 ボタン数が多くなる場合は、適切にサブウィンドウを使用するとより画面がすっきりします。 ただし、サブウィンドウ内でサブウィンドウ用ボタンを作成することはできません。
【スポンサーリンク】
【tkinter】アプリ起動時に画面を指定位置に移動させる方法【Python】
tkinterでアプリを作成すると、起動時に画面が出現する位置を指定したいケースがある。ここでは、ウィジェット出現時に発生するMapイベントを利用してアプリ起動時の画面位置を設定する方法を示す。
【スポンサーリンク】
以下の例では、Mapイベント(ウィジェットが出現したときに発生するイベント)を利用してメイン画面の位置を変更している。アプリを起動してボタンが生成された時にMapイベントが発生し、move_button関数が実行されることで画面位置をモニターの右上隅に移動させている。
【tkinter】画面をモニター端に自動で移動させる方法【Python】
以下の記事では、既知のサイズのtkinterメイン画面をモニター端に移動させる方法を示した。今回は、メイン画面のサイズによらずに自動でモニター端に移動させる方法を示す。
また、アプリ起動時に画面を移動させる方法は以下の記事を参照。
【スポンサーリンク】
以下の例では、ボタンクリック時にtkinter画面とモニターのサイズ(幅)を取得し、geometry関数を使用してtkinter画面を移動させている。
how to move the tkinter main window to the corner…
表示されたボタンをクリックすると、tkinter画面がモニター右上隅に移動する。
上の例では、実際にはtkinterの画面右側が、ややモニター外に位置してしまっている。これは、tkinterメイン画面には見えない枠があることが原因である。tkinter画面端とモニター端ピッタリ合わせるためには、その枠分だけ座標をシフトさせる必要がある。枠の幅は、以下の方法で取得可能である。実装方法は、上記例の"move_position2関数"を参照。
frame = self.master.winfo_rootx() - self.master.winfo_x() #invisible frame width
【tkinter】ウィジェットをドラッグで移動させる方法【Python】
ウィジェットをドラッグで移動させる処理の例を示す。
【スポンサーリンク】
以下の例では、B1-Motionイベント(ウィジェットをマウス左ボタンでドラッグしたときに発生するイベント)を利用してボタンウィジェットの位置を変更している。
gist5a5f3b0d3ccb775b0148be66d5d390e7
以下のB1-Motionイベント発生時に実行する関数(move_button関数)では、ウィジェットの座標とマウスポインタの座標を取得し、placeメソッドでウィジェットの座標を更新することでウィジェットをドラッグ移動させている。
def move_button(self, event): x = self.winfo_x() + event.x y = self.winfo_y() + event.y self.place(x=x, y=y)
上記例ではマウスポインタ部にウィジェット左上端が位置する。ウィジェット中央が来るようにする例は以下の通り。
def move_button2(self, event): x = self.winfo_x() + event.x - self.winfo_width() / 2 y = self.winfo_y() + event.y - self.winfo_height() / 2 self.place(x=x, y=y)
【tkinter】マウスポインタをウィジェットに重ねたときに処理を実行する方法【Python】
マウスのポインタがウィジェット上に位置した際に特定の処理を実行する例を示す。
【スポンサーリンク】
以下の例では、Motionイベント(マウスがウィジェット上に位置したときに発生するイベント)とLeaveイベント(マウスがウィジェット外に移動したときに発生するイベント)を利用してボタンウィジェットの色を変更している。
How to change a tkinter's widget color on or off hover
You can change widget color when on or off hover by binding "Motion" and "Leave"event to color change functions.
This is an example using button widget.
how to change tkinter's widget color on hover
off hover
on hover
How to create a simple dialog by yourself
If you want users to input something, you can use the tkinter.simpledialog module. But if you want to create a more complex or well-designed dialog, you can easily create one yourself.
example
How to "Just fit" tkinter main window to your display
Summarized how to just fit tkinter main window to the display edge. Normally the tkinter window is positioned slightly to the right of the position set using geometry method. You should take care if you want to just fit the window to your display.
example












