如何调整matplotlib图例框的大小?

Sib*_*ing 19 python matplotlib legend

我有一个左上角非常空白的图表.所以我决定将我的传奇盒子放在那里.

但是,我发现图例中的项目非常小,图例框本身很小.

"小",我的意思是这样的

在此输入图像描述

如何使图例框中的项目(不是文本!)更大?

我怎样才能让盒子本身更大?

Joe*_*ton 72

要控制图例中的填充(有效地使图例框更大),请使用borderpadkwarg.

例如,这是默认值:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)

fig, ax = plt.subplots()
for i in range(1, 6):
    ax.plot(x, i*x + x, label='$y={i}x + {i}$'.format(i=i))
ax.legend(loc='upper left')
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


如果我们更改内部填充borderpad=2,我们将使整个图例框更大(单位是字体大小的倍数,类似于em):

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)

fig, ax = plt.subplots()
for i in range(1, 6):
    ax.plot(x, i*x + x, label='$y={i}x + {i}$'.format(i=i))
ax.legend(loc='upper left', borderpad=2)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


或者,您可能希望更改项目之间的间距.使用labelspacing来控制这样的:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)

fig, ax = plt.subplots()
for i in range(1, 6):
    ax.plot(x, i*x + x, label='$y={i}x + {i}$'.format(i=i))
ax.legend(loc='upper left', labelspacing=2)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


在大多数情况下,但是,这是很有道理的同时调整labelspacingborderpad在同一时间:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)

fig, ax = plt.subplots()
for i in range(1, 6):
    ax.plot(x, i*x + x, label='$y={i}x + {i}$'.format(i=i))
ax.legend(loc='upper left', borderpad=1.5, labelspacing=1.5)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


另一方面,如果您有非常大的标记,则可能需要使图例中显示的线条的长度更大.例如,默认值可能如下所示:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 5)

fig, ax = plt.subplots()
for i in range(1, 6):
    ax.plot(x, i*x + x, marker='o', markersize=20,
            label='$y={i}x + {i}$'.format(i=i))
ax.legend(loc='upper left')
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果我们改变handlelength,我们将在图例中获得更长的线条,看起来更加真实.(我也在调整borderpad,labelspacing这里给予更多空间.)

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 5)

fig, ax = plt.subplots()
for i in range(1, 6):
    ax.plot(x, i*x + x, marker='o', markersize=20,
            label='$y={i}x + {i}$'.format(i=i))
ax.legend(loc='upper left', handlelength=5, borderpad=1.2, labelspacing=1.2)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


从文档中,您可以阅读以下其他一些选项:

Padding and spacing between various elements use following
keywords parameters. These values are measure in font-size
units. E.g., a fontsize of 10 points and a handlelength=5
implies a handlelength of 50 points.  Values from rcParams
will be used if None.

=====================================================================
Keyword       |    Description
=====================================================================
borderpad          the fractional whitespace inside the legend border
labelspacing       the vertical space between the legend entries
handlelength       the length of the legend handles
handletextpad      the pad between the legend handle and text
borderaxespad      the pad between the axes and legend border
columnspacing      the spacing between columns
Run Code Online (Sandbox Code Playgroud)

  • @perfectionm1ng - 很高兴帮忙!你可能还想看看`markerscale` kwarg.因为图例中错误条胡须的高度是由文本的高度控制的,所以很多时候你想缩小图例中的"点"以使错误条胡须更明显.不幸的是,我不认为有一种简单的方法可以说"在图例中将错误栏设置为两倍大"而不更改其他内容(例如字体大小).但是,"markerscale"是一种合理的解决方法. (3认同)

dab*_*lox 13

调用图例时,可以将prop参数与包含大小的dict一起使用.

plt.errorbar(x, y, yerr=err, fmt='-o', color='k', label = 'DR errors')
plt.legend(prop={'size':50})
Run Code Online (Sandbox Code Playgroud)

例如 改变图例大小

有关图例的更多信息,请参见此处