为什么很多例子在Matplotlib / pyplot / python中使用“fig,ax = plt.subplots()”
我正在学习通过学习示例来使用matplotlib
,并且在创build单个绘图之前,很多示例似乎包含类似以下的行。
fig, ax = plt.subplots()
这里有些例子…
- 修改滴答标签文本
- http://matplotlib.org/examples/pylab_examples/boxplot_demo2.html
我看到这个函数使用了很多,即使这个例子只是试图创build一个图表。 还有其他的好处吗? subplots()
的官方演示在创build单个图表时也使用f, ax = subplots
,并且只在之后引用ax。 这是他们使用的代码。
# Just a figure and one subplot f, ax = plt.subplots() ax.plot(x, y) ax.set_title('Simple plot')
plt.subplots()
是一个返回包含graphics和轴对象的元组的函数。 因此,在使用fig, ax = plt.subplots()
将这个元组解压缩到variablesfig
和ax
。 如果你想更改graphics属性或者将graphics保存为一个图像文件(例如fig.savefig('yourfilename.png')
,那么使用fig
是很有用的。你当然不需要使用返回的graphics对象,但是很多人们会在以后使用它,所以很常见。而且,所有轴对象(具有绘图方法的对象)都有一个父graphics对象,因此:
fig, ax = plt.subplots()
比这更简洁:
fig = plt.figure() ax = fig.add_subplot(111)
只是在这里补充。
下面的问题是,如果我想要更多的子图在图中?
正如文档中提到的,我们可以使用fig = plt.subplots(nrows=2, ncols=2)
)在一个graphics对象中设置一组带有网格(2,2)的子图。
然后我们知道, fig, ax = plt.subplots()
返回一个元组,首先尝试fig, ax1, ax2, ax3, ax4 = plt.subplots(nrows=2, ncols=2)
。
ValueError: not enough values to unpack (expected 4, got 2)
它引发了一个错误,但不用担心,因为我们现在看到plt.subplots()
实际上返回了一个包含两个元素的元组。 第一个必须是一个数字对象,另一个应该是一组子对象。
所以让我们再试一次:
fig, [[ax1, ax2], [ax3, ax4]] = plt.subplots(nrows=2, ncols=2)
并检查types:
type(fig) #<class 'matplotlib.figure.Figure'> type(ax1) #<class 'matplotlib.axes._subplots.AxesSubplot'>
当然,如果你使用参数(nrows = 1,ncols = 4),那么格式应该是:
fig, [ax1, ax2, ax3, ax4] = plt.subplots(nrows=1, ncols=4)
所以只要记得把这个列表的结构和我们在图中设定的子图网格一样。
希望这会对你有所帮助。