2011-08-19 63 views
190

简单问题在这里:我试图让我的图例的大小使用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) 

回答

338

您可以通过调整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

+1

你能告诉我在哪里可以找到关于'plot.rcParams.update'的细节? – haccks

39

这应该做

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

然后做剧情之后。

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

也大概你可以改变它通过一个matplotlib.font_manager.FontProperties实例,但我不知道该怎么做。 - >看Yann的回答。

+1

或'matplotlib.rc( '传奇',字体大小= 0.5,= 2线宽)')的 – Eric

+1

应'legend.handlelength'代替'legend.linewidth' –

+0

的构件get_default_size( FontManager返回默认大小。对我来说,它是12 –

4

在我安装的时候,FontProperties只会改变文本的大小,但它仍然太大而且没有间隔。我在pyplot.rcParamslegend.labelspacing中发现了一个参数,我猜测它被设置为字体大小的一小部分。我已经与

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

改变了它我不知道如何将它指定到pyplot.legend功能 - 通过

prop={'labelspacing':0.25} 

prop={'legend.labelspacing':0.25} 

一个错误回来。

+6

只给'legend(labelspacing = 0.25)'为我工作。 – Adobe

12

有多种设置可以调整图例大小。我发现最有用的两个是:

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

另外,legend documentation列出了许多其他填充和间距参数,包括:borderpadhandlelengthhandletextpadborderaxespad,和columnspacing。这些全都遵循与labelpacing和区域相同的形式,也是多个字体大小的区域。

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

26

也有一些从大小点命名fontsizes,除了:

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

使用方法:

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

import matplotlib.pyplot as plt

方法1:指定字号时调用传说(重复)

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

有了这个方法,你可以设置在创建每个图例的字体大小(让你有不同的fontsizes多个图例)。但是,每次创建图例时都必须手动输入所有内容。

(注:@ Mathias711列在他的回答中可用命名fontsizes)

方法2:指定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')