使用matplotlib创建子图

时间:2017-04-01 07:38:21

标签: python matplotlib plot jupyter-notebook figure

我目前正在学习使用Jupyter Notebook在Python中使用matplotlib创建绘图的基本原理。我的主要抱怨是在创建子图时,为什么我必须在一个块中运行代码?每当我尝试在不同的步骤中运行它时,它会让我发现奇怪的情节。例如:

plt.subplot(211)

plt.plot(range(10))

plt.subplot(212, facecolor='y')

plt.plot(randn(50))

我必须在一个步骤中执行这四行代码,而不是分四步运行它们。这到底发生了什么?为什么两种方法之间存在这样的差异?

1 个答案:

答案 0 :(得分:1)

在jupyter笔记本中,一旦对单元格进行评估并显示图形,您将丢失对该单元格的引用,并且该单元格中生成的图形将被关闭。
在新单元格中,当调用plt.subplot()时,pyplot看不到任何打开的数字,因此它会创建一个新的单元格。

大多数pyplot命令的工作原理如下:找出是否有一个开放的数字(也可能是当前的轴)。如果是这种情况,请对该图(轴)进行操作,否则,创建它。这就是为什么它通常被称为statemachine;根据当前状态,做点什么。

与此相反,还有一个面向对象的API。它的工作原理是明确地调用你想要操作的对象的方法。因此,为了重用以前单元格中的图形或轴,我们将保留对它们的引用。

明确调用fig = plt.figure(),以便fig在下一个单元格中仍然可用。与轴相同,调用ax = fig.add_subplot(111)以使子图在下一个单元格中可用。在任何时候,都可以调用fig来调用图形的显示。

以下是一个例子:

enter image description here