如何改变图例大小与matplotlib.pyplot

这里有一个简单的问题:我试图用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)
855197 次浏览

这应该可以

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

然后再做绘图。

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

当然,你也可以通过matplotlib.font_manager.FontProperties实例来改变它,但我不知道该怎么做。——>见Yann的回答。

你可以通过调整prop关键字来设置图例的单个字体大小。

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

这需要一个与matplotlib.font_manager.FontProperties属性对应的关键字字典。参见图例文档:

关键字参数:

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

在我的安装中,FontProperties只改变了文本大小,但它仍然太大,而且间隔太大。我在pyplot.rcParams中找到了一个参数:legend.labelspacing,我猜它被设置为字体大小的一部分。我用

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

我不确定如何将它指定给pyplot。图例函数-传递

prop={'labelspacing':0.25}

prop={'legend.labelspacing':0.25}

返回一个错误。

有多种调整图例大小的设置。我认为最有用的两个方法是:

  • Labelspacing:设置标签条目之间的间距为字体大小的倍数。例如,对于10号字体,legend(..., labelspacing=0.2)将把条目之间的间距减少到2号。我安装时的默认值大约是0.5。
  • 道具:允许完全控制字体大小等。你可以使用legend(..., prop={'size':8})来设置8号字体。我安装时的默认值是14个点。

此外,传奇的文档还列出了一些其他填充和间距参数,包括:borderpadhandlelengthhandletextpadborderaxespadcolumnspacing。这些都遵循与labelspacing和area相同的形式,也是fontsize的倍数。

这些值也可以设置为所有图形的默认值,使用matplotlibrc文件

除了点的大小之外,还有一些名为字形大小的:

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

用法:

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

使用import matplotlib.pyplot as plt

方法1:在调用图例时指定fontsize(重复)

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

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

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

方法2:在rcParams中指定fontsize(方便)

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

plot.legend(loc = 'lower right', decimal_places = 2, fontsize = '11', title = 'Hey there', title_fontsize = '20')

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

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

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

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

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

Labelspacing是每个标签之间的垂直空间。

handletextpad是实际图例和您的距离 标签。< / p >

fontsize不言自明