使用 matplotlib 创建子图
Creating subplots with matplotlib
我目前正在学习使用 Jupyter Notebook 在 Python 中使用 matplotlib
绘图的基本原理。我的主要抱怨是在创建子图时,为什么我必须 运行 将代码放在一个块中?每当我尝试分步 运行 它时,它都会给我带来奇怪的情节。例如:
plt.subplot(211)
plt.plot(range(10))
plt.subplot(212, facecolor='y')
plt.plot(randn(50))
我必须一步执行这四行代码,而不是 运行 四步执行每行代码。这到底是怎么回事?为什么这两种方法会有这么大的差异?
在 jupyter notebook 中,计算单元格并显示图形后,您将失去对它的引用,并关闭该单元格中生成的图形。
在新单元格中,当调用 plt.subplot()
时,pyplot 没有看到任何打开的图形,因此它创建了一个新图形。
大多数 pyplot 命令都是这样工作的:找出是否有开放图形(也可能是当前轴)。如果是这种情况,则对该图形(轴)进行操作,如果不是,则创建它。这就是为什么它通常被称为状态机;根据当前状态,做某事。
与此相对的还有面向对象API。它通过显式调用您要操作的对象的方法来工作。因此,为了重用以前单元格中的图形或坐标轴,我们将保留对它们的引用。
明确调用 fig = plt.figure()
,这样 fig
在下一个单元格中仍然可用。与轴相同,调用 ax = fig.add_subplot(111)
使子图在下一个单元格中可用。在任何时候,调用 fig
调用图形的显示。
这是一个例子:
我目前正在学习使用 Jupyter Notebook 在 Python 中使用 matplotlib
绘图的基本原理。我的主要抱怨是在创建子图时,为什么我必须 运行 将代码放在一个块中?每当我尝试分步 运行 它时,它都会给我带来奇怪的情节。例如:
plt.subplot(211)
plt.plot(range(10))
plt.subplot(212, facecolor='y')
plt.plot(randn(50))
我必须一步执行这四行代码,而不是 运行 四步执行每行代码。这到底是怎么回事?为什么这两种方法会有这么大的差异?
在 jupyter notebook 中,计算单元格并显示图形后,您将失去对它的引用,并关闭该单元格中生成的图形。
在新单元格中,当调用 plt.subplot()
时,pyplot 没有看到任何打开的图形,因此它创建了一个新图形。
大多数 pyplot 命令都是这样工作的:找出是否有开放图形(也可能是当前轴)。如果是这种情况,则对该图形(轴)进行操作,如果不是,则创建它。这就是为什么它通常被称为状态机;根据当前状态,做某事。
与此相对的还有面向对象API。它通过显式调用您要操作的对象的方法来工作。因此,为了重用以前单元格中的图形或坐标轴,我们将保留对它们的引用。
明确调用 fig = plt.figure()
,这样 fig
在下一个单元格中仍然可用。与轴相同,调用 ax = fig.add_subplot(111)
使子图在下一个单元格中可用。在任何时候,调用 fig
调用图形的显示。
这是一个例子: