当前位置: 首页 > 知识库问答 >
问题:

为什么许多示例在Matplotlib/pyplot/python中使用'fig,ax=plt.subplots()

毋宏茂
2023-03-14

通过学习示例,我正在学习使用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')

共有3个答案

慕容烨
2023-03-14

作为对问题和以上答案的补充,在plt.subplot()plt.subplot()之间还有一个重要的区别,请注意末尾缺少的's'

可以使用plt.subplot()一次生成所有子图,并将子图的图形和轴(轴的复数)作为元组返回。图形可以理解为绘制草图的画布。

# create a subplot with 2 rows and 1 columns
fig, ax = plt.subplots(2,1)

而如果要单独添加子情节,则可以使用plt.subplot()。它只返回一个子图的轴。

fig = plt.figure() # create the canvas for plotting
ax1 = plt.subplot(2,1,1) 
# (2,1,1) indicates total number of rows, columns, and figure number respectively
ax2 = plt.subplot(2,1,2)

然而,plt.subplot()是首选,因为它为您提供了更简单的选项,可以直接自定义整个体形

# for example, sharing x-axis, y-axis for all subplots can be specified at once
fig, ax = plt.subplots(2,2, sharex=True, sharey=True)
颛孙成益
2023-03-14

这里只是一个补充。

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

正如文档中提到的,我们可以使用fig=plt.subplots(nrows=2,nol=2)在一个图形对象中设置一组带有网格(2,2)的子图。

然后我们知道,fig,ax=plt.subplot()返回一个元组,让我们首先尝试fig,ax1,ax2,ax3,ax4=plt.subplot(nrows=2,ncols=2)

ValueError: not enough values to unpack (expected 4, got 2)

它会引发一个错误,但不用担心,因为我们现在看到plt.subplot()实际上返回一个包含两个元素的元组。第一个必须是地物对象,另一个必须是一组子地块对象。

让我们再试一次:

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)

所以请记住,保持列表的构造与图中设置的子地块网格相同。

希望这对你有帮助。

龙晟睿
2023-03-14

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

fig, ax = plt.subplots()

比这更简洁:

fig = plt.figure()
ax = fig.add_subplot(111)
 类似资料:
  • 问题内容: 我正在通过研究示例来学习使用方法,在创建单个图之前,很多示例似乎包含如下一行: 这里有些例子… 修改刻度标签文本 http://matplotlib.org/examples/pylab_examples/boxplot_demo2.html 我看到该函数使用了很多东西,即使该示例仅试图创建单个图表。还有其他优势吗?官方演示还在创建单个图表时使用,并且此后仅引用ax。这是他们使用的代码

  • 哪个对象包含属性?在下面的代码中(我已经导入了所需的软件包,并且正确地绘制了和图),为了设置y轴限制,我必须使用,为什么会这样?在我自己的头脑中,我会使用因为y轴属于ax对象实例。有人能解释一下为什么这是不正确的吗? 我在这里看到这个帖子: 为什么很多例子在Matplotlib/pyplot/python中使用"fig, ax=plt.subplots()" 这有助于澄清一点,但我仍然不确定。谢谢

  • 问题内容: 我试图通过自动生成的图形文件来进行数据分析并减少 刺痛 ,并报告更多的图形,为此,我一直在使用matplotlib / pyplot / pylab。效果很好,但是当我尝试在无头服务器上运行它时… 对于此应用程序,我仅使用PyLab,但在使用了一些Google之后,我将以下内容添加到pylab导入之前: 哪个应该更改了后端,但没有任何效果。 有什么想法我做错了吗? 远程机器确实具有X转

  • 问题内容: 在开发Java时,您始终了解到最好使用List接口作为存储列表的变量的类型来创建ArrayList。 但是,通过查看捆绑包中包含的许多android示例,他们使用Class创建了列表。 有什么理由要这样做吗?是显式设置Class的速度更快,更轻便还是其他? 问题答案: 在资源受限的环境(如Android设计的手机)中,最好避免使用Interface,因为它涉及额外的虚函数调用。

  • 我想在pyqt GUI中为matplotlib(python)中的多个绘图创建一个自定义图例。(pyqt建议不要使用pyplot,因此必须使用面向对象的方法)。 网格中将显示多个绘图,但用户可以定义要显示的绘图数量。我希望图例显示在所有绘图的右侧,因此我不能简单地为最后绘制的轴创建图例。我希望为整个图形创建图例,而不仅仅是最后一个轴(类似于pyplot中的plt.figlegend)。 在我在别处

  • 我通常使用以下软件包创建绘图:。但是,还有一个名为。 在使用它们时,我无法发现两者之间的任何区别。所以我的问题如下: 包。在哪种情况下,你会建议一种而不是另一种?