为什么很多例子在 Matplotlib/pyplot/python 中使用 \`fig, ax = plt.subplots()\`

新手上路,请多包涵

我正在通过研究示例来学习使用 matplotlib ,在创建单个图之前,很多示例似乎都包含如下一行…

 fig, ax = plt.subplots()

这里有些例子…

我看到这个函数用了很多,即使这个例子只是试图创建一个图表。还有其他优势吗? subplots() 的官方演示在创建单个图表时也使用 f, ax = subplots ,之后它只引用 ax。这是他们使用的代码。

 # Just a figure and one subplot
f, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('Simple plot')

原文由 neelshiv 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 616
2 个回答

plt.subplots() 是一个返回包含图形和轴对象的元组的函数。因此,当使用 fig, ax = plt.subplots() 时,您将此元组解压到变量 figax 中。拥有 fig 如果您想更改图形级属性或稍后将图形保存为图像文件(例如使用 fig.savefig('yourfilename.png') ),则很有用。您当然不必使用返回的图形对象,但很多人稍后会使用它,因此很常见。此外,所有轴对象(具有绘图方法的对象)无论如何都有一个父图形对象,因此:

 fig, ax = plt.subplots()

比这更简洁:

 fig = plt.figure()
ax = fig.add_subplot(111)

原文由 jonchar 发布,翻译遵循 CC BY-SA 4.0 许可协议

这里只是补充一下。

下面的问题是如果我想要图中有更多的子图怎么办?

如文档中所述,我们可以使用 fig = plt.subplots(nrows=2, ncols=2) 在一个图形对象中设置一组具有 grid(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)

并检查类型:

 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)

因此,请记住保持列表的构造与我们在图中设置的子图网格相同。

希望这对您有所帮助。

原文由 Duskash 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题