为什么很多例子在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()将这个元组解压缩到variablesfigax 。 如果你想更改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) 

所以只要记得把这个列表的结构和我们在图中设定的子图网格一样。

希望这会对你有所帮助。