回答问题

我有一个左上角相当空白的图表。所以我决定把我的传奇盒子放在那里。

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

“小”,我的意思是这样的

在此处输入图像描述

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

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

Answers

要控制图例内部的填充(有效地使图例框变大),请使用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()

在此处输入图像描述


如果我们用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()

在此处输入图像描述


或者,您可能想要更改项目之间的间距。使用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()

在此处输入图像描述


然而,在大多数情况下,同时调整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()

在此处输入图像描述


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

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()

在此处输入图像描述

如果我们改变handlelength,我们会在图例中得到更长的线条,看起来更真实一些。 (我也在此处调整borderpadlabelspacing以提供更多空间。)

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()

在此处输入图像描述


从文档中,这里有一些您可能想要探索的其他选项:

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
Logo

学AI,认准AI Studio!GPU算力,限时免费领,邀请好友解锁更多惊喜福利 >>>

更多推荐