How do I set the figure title and axes labels font size in Matplotlib?
我在Matplotlib中创建一个图形,如下所示:
1 2 3 4 5 6 7 8
| 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不是我想要的。如何分别设置图形标题和轴标签的字体大小?
- 我很好奇,所以我尝试添加你的mpl.rcParams['font.size'] = 20,并尝试将值更改为10和14。首先,我发现我有错误,除非我把mpl改成plt。这一更改消除了错误,但代码行对我的标题或标签没有影响。确定这个语法正确吗?
- 现在,我从已接受答案的注释中想,问题可能是我的导入语句,尽管如果我不导入该命令,它为什么不抛出错误超出了我的能力范围。测试mpl命令时是否使用了另一条导入行?
处理文本(如label、title等)的函数接受与matplotlib.text.text相同的参数。对于字体大小,可以使用size/fontsize:
1 2 3 4 5 6 7 8
| 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') |
对于全局设置的title和label大小,mpl.rcParams包含axes.titlesize和axes.labelsize。(从页面上):
1 2
| axes.titlesize : large # fontsize of the axes title
axes.labelsize : medium # fontsize of the x any y labels |
(据我所见,没有办法分别设置x和y标签大小。)
我看到axes.titlesize不影响suptitle。我想,你需要手动设置。
- 谢谢!有没有一种方法可以全局但明确地设置(suptitle、xlabel、ylabel)?我做了很多图表,只想指定一次…
- @凡士基1:我以为你不想要全局设置:)。为此,你需要mpl.rcParams。我已经编辑了我的答案。
- 对于像我这样的人来说,寻求改变头衔的方法:plt.rcParams.update({'axes.titlesize': 'small'})
- 从rcParams链接,除了axes.titlesize外,还使用figure.titlesize。
- 有没有办法设置字体类型,如Times New Roman?
- @疯狂物理学家u'figure.titlesize is not a valid rc parameter.See rcParams.keys() for a list of valid parameters.'…尽管它列得够奇怪,但不认为它起作用。
- @亚历山德罗姆卡兰。我运行了python -c 'import matplotlib as mpl; print(mpl.__version__); print("figure.titlesize" in mpl.rcParams.keys())'。结果是1.5.1,True。1)您使用的Matplotlib版本是什么?什么版本的python?2)它可能是一个bug,因为某种原因,它在py2中接受str,但不接受unicode?
- python: 2.7.11和matplotlib: 1.4.3…我讨厌这些虫子,特别是当我们有很多有趣的物理要绘制的时候,它们太学究了。我就把它留在这里作为警告,以防有人认为他们做错了。
- 谢谢。是否有一种方法可以全局设置标题和轴标签的显式数字大小,而不是总是执行ax.set_title('some title', fontsize=15)、ax.set_xlabel('some xlabel', fontsize=12)?似乎rcParams只接受字符串。
您还可以通过rcparams字典全局执行此操作:
1 2 3 4 5 6 7 8
| 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) |
- 除了'x-large'以外还有什么其他尺寸?
- 'x x small'、'x-small'、'small'、'medium'、'large'、'x-large'、'xx large'。见matplotlib.org/api/…
- 使用pylab.rcParams.keys()查看参数的完整列表。
- 谢谢。是否有一种方法可以全局设置标题和轴标签的显式数字大小,而不是总是执行ax.set_title('some title', fontsize=15)、ax.set_xlabel('some xlabel', fontsize=12)?似乎rcParams只接受字符串。
如果您更习惯使用ax对象进行绘图,您可能会发现ax.xaxis.label.set_size()更容易记忆,或者至少更容易在ipython终端中找到using tab。之后似乎需要重新绘制操作才能看到效果。例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| import matplotlib.pyplot as plt
# set up a plot with dummy data
fig, ax = plt.subplots()
x = [0, 1, 2]
y = [0, 3, 9]
ax.plot(x,y)
# title and labels, setting initial sizes
fig.suptitle('test title', fontsize=12)
ax.set_xlabel('xlabel', fontsize=10)
ax.set_ylabel('ylabel', fontsize='medium') # relative to plt.rcParams['font.size']
# setting label sizes after creation
ax.xaxis.label.set_size(20)
plt.draw() |
我不知道在SUPPITLE创建后如何设置SUPPITLE大小。
- fig.suptitle('test title', fontsize = 20)似乎有效。ax.set_xlabel('xlabel', fontsize = 20)' also works, in which case we can do away with ax.xaxis.label.set"大小(20)`.
- @这是真的,这些形式类似于阿瓦里斯的回答。为了完整起见,我将添加它们。当我与ipython绘图交互工作时,我仍然可以使用ax.xaxis.label.set_size(),我想对各种字体大小进行快速的视觉评估。
- 你知道使用AX对象和图形对象之间是否有任何(隐藏的)区别,或者两者都是完全等效的吗?为什么有些特性有不同的接口?(plt.xlabel()与ax.set xlabel())
- @诺曼底乌斯,如果你在上面的例子中指的是ax和fig,它们是完全不同的物体——fig是整体的图形,可能包含几个轴。因此无花果和斧头有不同的性质。就Pyplot类型调用和对象调用之间的区别(如,如,plt.xlabel()与ax.set_xlabel()所说)而言,它们是等效的,但需要注意的是,plt.*函数在当前轴/图形上工作。因此,如果您使用多个轴设置一个图形,您可能需要使用像ax1.set_xlabel()这样的显式调用来避免混淆。
为了只修改标题的字体(而不是轴的字体),我使用了以下方法:
1 2 3 4
| import matplotlib.pyplot as plt
fig = plt.Figure()
ax = fig.add_subplot(111)
ax.set_title('My Title', fontdict={'fontsize': 8, 'fontweight': 'medium'}) |
fontdict,matplotlib.text.text中的所有Kwarg除外。