如何设置Matplotlib轴图例的字体大小?

78

我有这样的代码:

import matplotlib.pyplot as plt
from matplotlib.pyplot import *
from matplotlib.font_manager import FontProperties

fontP = FontProperties()
fontP.set_size('xx-small')
fig=plt.figure()
ax1=fig.add_subplot(111)
plot([1,2,3], label="test1")
ax1.legend(loc=0, ncol=1, bbox_to_anchor=(0, 0, 1, 1),
           prop = fontP,fancybox=True,shadow=False,title='LEGEND')
plt.show()

legend fontsize

从图中可以看出,Fontsize设置不会影响图例标题字体的大小。

如何将图例标题的字体大小设置为更小的尺寸?


有关更新(2021年),请参见https://dev59.com/sGct5IYBdhLWcg3wCJF-#67879275 - Alejo Bernardin
9个回答

105

这绝对是一个老问题,但也让我感到沮丧,其他答案都没有改变图例的标题字体大小,而只是改变了其余的文本。所以,在漫长的matplotlib文档中寻找答案一段时间后,我想出了这个解决方法。

legend = ax1.legend(loc=0, ncol=1, bbox_to_anchor=(0, 0, 1, 1),
           prop = fontP,fancybox=True,shadow=False,title='LEGEND')

plt.setp(legend.get_title(),fontsize='xx-small')

从Matplotlib 3.0.3版本开始,您还可以通过全局设置来设置它。

plt.rcParams['legend.title_fontsize'] = 'xx-small'

7
title_fontsize现在是您可以传递给legend(...)的参数,但是您的答案使其易于发现,所以谢谢! - Davidmh

45

以下是如何更改图例列表和/或图例标题的字体大小:

legend=plt.legend(list,loc=(1.05,0.05), title=r'$\bf{Title}$') #Legend: list, location, Title (in bold)
legend.get_title().set_fontsize('6') #legend 'Title' fontsize
plt.setp(plt.gca().get_legend().get_texts(), fontsize='12') #legend 'list' fontsize

请问您能帮我将您提出的代码片段与我的代码合并吗?当我将这个片段添加到我的代码中时,我看到了一些错误。 具体来说: Traceback (most recent call last): <file> in <module> legend=plt.legend(list,loc=(1.05,0.05), title=r'$\bf{Title}$') #Legend: list, location, Title (in bold) File "C:\Python26\Lib\site-packages\matplotlib\pyplot.py", line 2800, in legend ret = gca().legend(*args, **kwargs) File "C:\Python26\Lib\site-packages\matplotlib\axes.py", line 4494, in legend labels)] TypeError: zip argument #2 must support iteration - Tapajit Dey
我注意到这些命令在Spyder中使用IPython控制台无法正常工作,但在标准Python(v2.7)控制台中可以正常工作。在IPython中,它会报错:'NameError: name 'gca' is not defined'。 - DougR

35

我也曾经碰到这个问题,以下是另一种更流畅的方法:

leg = ax.legend()
leg.set_title('A great legend',prop={'size':14})

34

受当前最佳答案启发,我发现了一种稍微更自然的方法来改变图例中的字体大小。 fontsize 参数设置每个数据标签的字体大小,title_fontsize 参数设置标题的字体大小(如果为图例提供了标题)。

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([0,1,2],[2,1,2],label='test_data (fs=12)')
ax.legend(fontsize=12, title='TITLE (fs=30)',title_fontsize=30)

提供如下图所示的数字:
在此输入图片描述


如果添加了自定义行/补丁,则此操作将失败。 - Alexander McFarlane

14

我不知道如何为单个图设置它,但我总是在全局范围内设置:

plt.rc('legend',**{'fontsize':6})

12

现在在2023年,使用matplotlib 3.4.2,您可以使用以下内容设置图例字体:

Now in 2021, with matplotlib 3.4.2 you can set your legend fonts with

plt.legend(title="My Title", fontsize=10, title_fontsize=15)

其中fontsize是图例中项目字体的大小,而title_fontsize是图例标题的字体大小。更多信息请参考Matplotlib文档


8

这是最快的:

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

5
很抱歉,这个并不能改变标题的大小。 - Ben Lindsay

4

我通常是这样做的。一旦情节(plot)完成,我会按照以下步骤进行。

plt.legend(loc=0, numpoints=1)
leg = plt.gca().get_legend()
ltext  = leg.get_texts()
plt.setp(ltext, fontsize='small') 

我不知道这是否适用于你


在ipython笔记本中,我只需执行setp(gca().get_legend().get_texts(), fontsize='small') - Ondřej Čertík

0
最简单的方法是使用(它对我很有帮助)
ax.legend(title = "anything", title_fontsize = 8, fontsize = 6)

title_fontsize用于改变标题的字体大小,非常有用。


1
目前来看,您的回答不太清晰。请进行[编辑]以添加更多细节,帮助他人了解如何回答问题。您可以在帮助中心找到有关编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接