如何使用 matplotlib.pyplot 更改图例大小

Posted

技术标签:

【中文标题】如何使用 matplotlib.pyplot 更改图例大小【英文标题】:How to change legend size with matplotlib.pyplot 【发布时间】:2011-10-30 19:12:34 【问题描述】:

这里有一个简单的问题:我正在尝试使用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)

【问题讨论】:

有关 2021 年的更新答案,请参阅 ***.com/a/62669552/2612410 【参考方案1】:

您可以通过调整prop 关键字为图例设置单独的字体大小。

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

这需要与matplotlib.font_manager.FontProperties 属性对应的关键字字典。见documentation for legend:

关键字参数:

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

【讨论】:

您能告诉我在哪里可以找到有关plot.rcParams.update 的详细信息吗? 有关更新的答案 (2020),请参阅 ***.com/a/62669552/2612410 感谢您的回答,但为什么matplotlib 会选择一种违反直觉的方式为legend 自定义字体?【参考方案2】:

使用import matplotlib.pyplot as plt

方法一:调用legend时指定字体大小(重复)

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

使用此方法,您可以在创建时为每个图例设置字体大小(允许您拥有多个具有不同字体大小的图例)。但是,每次创建图例时都必须手动键入所有内容。

(注意:@Mathias711 在他的回答中列出了可用的命名字体大小)

方法二:在rcParams中指定字体大小(方便)

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

使用此方法,您可以设置默认图例字体大小,除非您使用方法 1 另有指定,否则所有图例将自动使用该字体大小。这意味着您可以在代码开头设置图例字体大小,而不必担心将其设置为每个单独的传奇。

如果您使用命名大小,例如'medium',则图例文本将随rcParams 中的全局font.size 缩放。要更改font.size,请使用plt.rc(font.size='medium')

【讨论】:

只是为了通知 Python 初学者(像我一样):方法 1 仅在创建绘图后(在 plot() 行之后)有效,方法 2 仅在创建绘图之前有效。谢谢你。我同意@Scott Gigante,这应该是答案!【参考方案3】:

应该这样做

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

然后再做情节。

还有很多其他的 rcParams,它们也可以在 matplotlibrc 文件中设置。

您也可以通过matplotlib.font_manager.FontProperties 实例更改它,但我不知道该怎么做。 --> 见 Yann 的回答。

【讨论】:

matplotlib.rc('legend', fontsize=0.5, linewidth=2) 应该是 legend.handlelength 而不是 legend.linewidth FontManager 的成员 get_default_size() 返回默认大小。对我来说是 12 不再鼓励使用“PyLab”:matplotlib.org/faq/…【参考方案4】:

还有几个叫fontsizes,除了大小以外:

xx-small
x-small
small
medium
large
x-large
xx-large

用法:

pyplot.legend(loc=2, fontsize = 'x-small')

【讨论】:

【参考方案5】:

调整图例大小有多种设置。我觉得最有用的两个是:

labelspacing:以字体大小的倍数设置标签条目之间的间距。例如,对于 10 磅字体,legend(..., labelspacing=0.2) 会将条目之间的间距减少到 2 磅。我安装的默认值约为 0.5。 prop:允许完全控制字体大小等。您可以使用legend(..., prop='size':8) 设置8 点字体。我安装的默认值约为 14 点。

此外,legend documentation 列出了许多其他填充和间距参数,包括:borderpadhandlelengthhandletextpadborderaxespadcolumnspacing。这些都遵循与标签间距和区域相同的形式,也是字体大小的倍数。

这些值也可以使用matplotlibrc file 设置为所有数字的默认值。

【讨论】:

【参考方案6】:

现在在 2021 年,您可以使用 matplotlib 3.4.2 设置您的图例字体

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

其中fontsize 是图例中项目的字体大小,title_fontsize 是图例标题的字体大小。更多信息matplotlib documentation

【讨论】:

【参考方案7】:

在我的安装中,FontProperties 仅更改了文本大小,但它仍然太大且间距很大。我在pyplot.rcParams 中找到了一个参数:legend.labelspacing,我猜它设置为字体大小的一小部分。我已经改变了它

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

我不确定如何将其指定给 pyplot.legend 函数 - 传递

prop='labelspacing':0.25

prop='legend.labelspacing':0.25

返回一个错误。

【讨论】:

【参考方案8】:

plot.legend(loc = '右下', decimal_places = 2, fontsize = '11', title = '你好', title_fontsize = '20')

【讨论】:

【参考方案9】:

您可以减小图例大小设置:

plt.legend(labelspacing=y, handletextpad=x,fontsize)  

labelspacing 是每个标签之间的垂直间距。

handletextpad 是实际图例与您的 标签。

字体大小不言自明

【讨论】:

以上是关于如何使用 matplotlib.pyplot 更改图例大小的主要内容,如果未能解决你的问题,请参考以下文章

如何更改Matplotlib表的透明度/不透明度?

如何使用 matplotlib 更改 xticks? [复制]

dpplot命令安装

如何提高 matplotlib 图像质量?

如何使用 matplotlib 更改 y 轴的比例? [复制]

Python matplotlib.pyplot饼图:如何去掉左边的标签?