我正在通过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
在代码正文中的什么地方使用?我目前的理解是,顶行定义了fig
和ax
是什么,我可以看到在代码正文中使用了ax
来定义散点图,但是{ {1}}用过?我试图删除它并运行代码,但出现此错误:
fig
如果有人可以解释以上误解。
答案 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 docs,subplots
创建一个图形和一组子图。具体来说,
返回:
图:图
ax :轴。轴对象或轴对象数组。如果创建了多个子图,则
ax
可以是单个Axes对象,也可以是Axes对象数组。可以使用squeeze关键字控制结果数组的尺寸,请参见上文。
现在,当您完成
fig, ax = plt.subplots()
图形对象分配给变量fig
,轴对象分配给变量ax
。
然后,fig
将使您可以访问图形级上的属性,例如图形标题。 ax
将使您可以访问各个子图级别的属性,例如每个子图的图例,轴标签,刻度线。如果您有多个子图,它将作为Axes对象的数组。