我有一个左上角非常空白的图表。所以我决定将我的传奇盒子放在那里。
但是,我发现传奇中的项目非常小,图例框本身也非常小。
“小”,我的意思是这样的
如何让图例框中的项目(不是文字!)更大?
如何让盒子本身更大?
答案 0 :(得分:62)
要控制图例中的填充(有效地使图例框变大),请使用borderpad
kwarg。
例如,这是默认值:
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()
但是,在大多数情况下,同时调整labelspacing
和borderpad
是最有意义的:
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
,我们会在图例中获得更长的线条,这看起来更加真实。 (我也在这里调整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()
从文档中,您可以阅读以下其他一些选项:
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
答案 1 :(得分:10)
调用图例时,可以将prop
参数与包含大小的字典一起使用。
plt.errorbar(x, y, yerr=err, fmt='-o', color='k', label = 'DR errors')
plt.legend(prop={'size':50})
E.g。
有关legend
的更多信息,请参阅此处