2012-09-16 165 views
259

我创造了一个Matplotlib图所示:如何在Matplotlib中设置图形标题和轴标签字体大小?

from matplotlib import pyplot as plt 

fig = plt.figure() 
plt.plot(data) 
fig.suptitle('test title') 
plt.xlabel('xlabel') 
plt.ylabel('ylabel') 
fig.savefig('test.jpg') 

我想为图标题和轴标签中指定的字体大小。我需要三种不同的字体大小,因此设置全局字体大小(mpl.rcParams['font.size']=x)并不是我想要的。如何分别设置图形标题和轴标签的字体大小?

+0

我很好奇,所以我试着添加你的'mpl.rcParams ['font.size'] = 20'并尝试将值改为10和14.首先我发现我得到了错误,除非我将'mpl'改为'plt '。这个改变清除了错误,但是这行代码对我的标题或标签没有影响。当然,这个语法是正确的? – TMWP

+0

现在我从接受的答案的评论中思考问题可能是我的导入声明,但是如果我没有导入命令,为什么它不会抛出错误超出了我的意思。在测试'mpl'命令时是否有另一个导入行? – TMWP

回答

400

处理诸如label,title等文本的函数接受与matplotlib.text.Text相同的参数。字体大小,您可以使用size/fontsize

from matplotlib import pyplot as plt  

fig = plt.figure() 
plt.plot(data) 
fig.suptitle('test title', fontsize=20) 
plt.xlabel('xlabel', fontsize=18) 
plt.ylabel('ylabel', fontsize=16) 
fig.savefig('test.jpg') 

对于全球范围内设置titlelabel大小,mpl.rcParams包含axes.titlesizeaxes.labelsize。 (从页面):

axes.titlesize  : large # fontsize of the axes title 
axes.labelsize  : medium # fontsize of the x any y labels 

(据我所看到的,是没有办法单独设置xy标签尺寸。)

而且我看到axes.titlesize不影响suptitle。我想,你需要手动设置。

+0

谢谢!有没有一种方法可以在全局范围内设置,但明确地为(suptitle,xlabel,ylabel)设置?我制作了很多图表,只是想指定一次... – vasek1

+0

@ vasek1:我以为你不想全局设置:)。为此你需要'mpl.rcParams'。我编辑了我的答案。 – Avaris

+8

对于像我这样的其他人寻找更改标题大小的解决方案:'plt.rcParams.update({'axes.titlesize':'small'})' –

30

您也可以通过rcParams字典做全球:

import matplotlib.pylab as pylab 
params = {'legend.fontsize': 'x-large', 
      'figure.figsize': (15, 5), 
     'axes.labelsize': 'x-large', 
     'axes.titlesize':'x-large', 
     'xtick.labelsize':'x-large', 
     'ytick.labelsize':'x-large'} 
pylab.rcParams.update(params) 
+0

除了''x-large''外还有其他尺寸的东西吗? –

+2

'xx-small','x-small','small','medium','large','x-large','xx-large'。请参阅https://matplotlib.org/api/font_manager_api.html#matplotlib.font_manager.FontProperties.set_size – tsando

9

如果您更习惯于使用ax对象做你的绘图,您可能会发现ax.xaxis.label.set_size()更容易记住,或者至少更容易在ipython终端中查找使用标签。看到效果后,似乎需要重绘操作。例如:

import matplotlib.pyplot as plt 

fig, ax = plt.subplots() 
x = [0,1,2] 
y = [0, 3, 9] 
ax.plot(x,y) 
fig.suptitle('test title') 
ax.set_xlabel('xlabel') 
ax.set_ylabel('ylabel') 
ax.xaxis.label.set_size(20) 
plt.draw() 

我不知道类似的方式来设置suptitle的大小。

相关问题