创建此散点图时,第一行fig,ax = plt.subplots()的相关性是什么

时间:2019-07-18 10:51:59

标签: python matplotlib

我正在通过python课程中的数据可视化来帮助我的实验室报告,在这个创建散点图的示例中,我似乎无法理解第二行的目的:

import matplotlib.pyplot as plt
fig,ax = plt.subplots()
ax.scatter([1,2,3,4,5],[1,2,3,4,5])
ax.set_xlabel('X')
ax.set_ylabel('Y')
plt.show()

有人可以解释一下第一行在这里做什么。 我才刚刚开始使用python,之前也没有见过这种语法(fig,ax = plt.subplots())。我试图通过编写x,y=1来测试这是否是将2个变量分配给同一事物的一种方法,最终导致出现错误“ int对象不可迭代”。

我不明白的另一件事是,fig在代码正文中的什么地方使用?我目前的理解是,顶行定义了figax是什么,我可以看到在代码正文中使用了ax来定义散点图,但是{ {1}}用过?我试图删除它并运行代码,但出现此错误:

fig

如果有人可以解释以上误解。

2 个答案:

答案 0 :(得分:1)

  

我试图通过写x,y = 1来测试是否是将2个变量分配给同一事物的一种方法,最终导致出现错误“ int对象不可迭代”。

您几乎是正确的。可以同时分配多个变量的语法,但是您缺少的是plt.subplots()返回一个元组-将两个值配对在一起。 >

如果您想更好地理解它,可以运行:

a, b = (1, 4)

a,b = 1, 4

(就python而言,它是相同的,如果使用或返回了多个值,它会将值打包/解包到元组)

  

我试图删除它并运行代码,但出现此错误:

     

'tuple'对象没有属性'scatter'

这也与您收到此错误的原因有关。该代码片段中确实没有使用该图,但是对于python来说,您需要使用它,以了解您要使用部分元组而不是元组本身。 例如:a=(1,2)将导致保留一个元组,但是在a, b = 1, 2中,每个创建的变量将保留一个整数。

在您的情况下,轴对象具有方法scatter,元组对象没有该方法,因此会出错。

答案 1 :(得分:1)

根据official docssubplots创建一个图形和一组子图。具体来说,

  

返回

     

:图

     

ax :轴。轴对象或轴对象数组。如果创建了多个子图,则ax可以是单个Axes对象,也可以是Axes对象数组。可以使用squeeze关键字控制结果数组的尺寸,请参见上文。

现在,当您完成

fig, ax = plt.subplots()

图形对象分配给变量fig,轴对象分配给变量ax

然后,fig将使您可以访问图形级上的属性,例如图形标题。 ax将使您可以访问各个子图级别的属性,例如每个子图的图例,轴标签,刻度线。如果您有多个子图,它将作为Axes对象的数组。