matplotlib.pyplotで凡例のサイズを変更する方法


324

ここで簡単な質問:凡例のサイズをmatplotlib.pyplot小さくしようとしています(つまり、テキストを小さくします)。私が使用しているコードは次のようなものです:

plot.figure()
plot.scatter(k, sum_cf, color='black', label='Sum of Cause Fractions')
plot.scatter(k, data[:, 0],  color='b', label='Dis 1: cf = .6, var = .2')
plot.scatter(k, data[:, 1],  color='r',  label='Dis 2: cf = .2, var = .1')
plot.scatter(k, data[:, 2],  color='g', label='Dis 3: cf = .1, var = .01')
plot.legend(loc=2)

回答:


543

propキーワードを調整することにより、凡例の個別のフォントサイズを設定できます。

plot.legend(loc=2, prop={'size': 6})

これは、matplotlib.font_manager.FontPropertiesプロパティに対応するキーワードの辞書を取ります。凡例ドキュメントを参照してください:

キーワード引数:

prop: [ None | FontProperties | dict ]
    A matplotlib.font_manager.FontProperties instance. If prop is a 
    dictionary, a new instance will be created with prop. If None, use
    rc settings.

バージョン1.2.1以降では、キーワードを使用することもできfontsizeます。


1
どこで詳細を見つけることができますplot.rcParams.updateか?
2015年

64

これはすべきです

import pylab as plot
params = {'legend.fontsize': 20,
          'legend.handlelength': 2}
plot.rcParams.update(params)

その後、プロットを行います。

他にもたくさんのrcParamがありますが、matplotlibrcファイルで設定することもできます。

また、おそらくmatplotlib.font_manager.FontPropertiesインスタンスを渡してそれを変更することができますが、これは方法がわかりません。-> Yannの回答を参照してください。


2
またはmatplotlib.rc('legend', fontsize=0.5, linewidth=2)
Eric

2
でなければならないことlegend.handlelengthの代わりにlegend.linewidth
エメットB

FontManagerのメンバーget_default_size()はデフォルトのサイズを返します。私にとってそれは12
guhur

1
:「PyLab」の使用は、任意のより多くの奨励されていないmatplotlib.org/faq/...
ハグバード

51

を使用して import matplotlib.pyplot as plt

方法1:凡例を呼び出すときにフォントサイズを指定する(繰り返し)

plt.legend(fontsize=20) # using a size in points
plt.legend(fontsize="x-large") # using a named size

この方法を使用すると、作成時に各凡例のフォントサイズを設定できます(フォントサイズが異なる複数の凡例を作成できます)。ただし、凡例を作成するたびに、すべてを手動で入力する必要があります。

(注:@ Mathias711は彼の回答に利用可能な名前付きフォントサイズをリストしました)

方法2:rcParamsでフォントサイズを指定する(便利)

plt.rc('legend',fontsize=20) # using a size in points
plt.rc('legend',fontsize='medium') # using a named size

この方法では、デフォルトの凡例のフォントサイズを設定します。方法1を使用して指定しない限り、すべての凡例は自動的にそれを使用します。つまり、コードの最初で凡例のフォントサイズを設定でき、個々の凡例ごとに設定する必要はありません。 。

たとえば'medium'、名前付きサイズを使用する場合、凡例テキストはのグローバルfont.sizeに合わせてスケーリングされrcParamsます。font.size使用を変更するにはplt.rc(font.size='medium')


1
(私と同じように)Pythonの初心者に知らせるためだけです:メソッド1はプロットを作成した後でのみ(plot()行の後)機能し、メソッド2はプロットを作成する前にのみ機能します。ありがとうございました。@Scott Giganteに同意します。これが答えになるはずです!
Mateus da Silva Teixeira


19

凡例のサイズを調整するための複数の設定があります。私が最も役立つと思う2つは次のとおりです。

  • labelspacing:フォントエントリの間隔をフォントサイズの倍数で設定します。たとえば、10ポイントのフォントでlegend(..., labelspacing=0.2)は、エントリ間の間隔が2ポイントに減少します。インストール時のデフォルトは約0.5です。
  • prop:フォントサイズなどを完全に制御できますlegend(..., prop={'size':8})。を使用して8ポイントのフォントを設定できます。私のインストールのデフォルトは約14ポイントです。

また、伝説のドキュメントのリストを含む他のパディングと間隔パラメータの数:borderpadhandlelengthhandletextpadborderaxespad、とcolumnspacing。これらはすべて、labelpacingおよびareaと同じ形式に従い、fontsizeの倍数でもあります。

これらの値は、matplotlibrcファイルを使用して、すべてのFigureのデフォルトとして設定することもできます


5

私のインストールでは、FontPropertiesはテキストサイズのみを変更しますが、それでもまだ大きすぎて間隔が空いています。pyplot.rcParamslegend.labelspacingにパラメータが見つかりました。これは、フォントサイズの一部に設定されていると思います。私はそれを変えました

pyplot.rcParams.update({'legend.labelspacing':0.25})

それをpyplot.legend関数に指定する方法がわかりません-渡す

prop={'labelspacing':0.25}

または

prop={'legend.labelspacing':0.25}

エラーで戻ってきます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.