matplotlib 在 Jupyter 中重用轴

问题描述 投票:0回答:1

这是我一段时间以来一直想要答案的问题。我花了很多时间寻找 SO 的答案。这个问题是相关的:Matplotlib - 如何使用不同的函数编辑相同的图?.

我猜对此有一个简单的解释,我有兴趣了解它。

问题是:

我可以在 Jupyter 中的一个单元格中显示一个轴,然后在另一个单元格中再次显示它吗?看来我不能。似乎一旦显示了轴,它就会以某种方式“消耗”,就像它是一次性工具一样。我可以添加额外的绘图并重新显示figure(没有任何轴),但轴本身已“用完”。

以下是展示此行为的示例:

使用 Jupyter,我可以执行以下操作在第一个单元格中创建绘图: import matplotlib.pyplot as plt some_x_data = [11.4, 23.11, 27.93, 33.47, 45.98, 47.23, 53.84, 65.34, 87.23] some_y_data = [(5.3 * x * (10 - x/10)) for x in some_x_data] fig = plt.figure() ax = fig.add_subplot() ax.plot(some_x_data, some_y_data)

绘图显示:

现在,在

另一个单元格

中,我希望再次重新显示轴,因此我执行以下操作: ax

但是没有显示任何轴。相反,返回值是:

<AxesSubplot:>

但是,如果我用 
ax

代替

fig
运行单元格,那么我会看到该图,但没有轴:
fig

下一步

我尝试向另一个单元格中的轴添加新绘图: ax.scatter([40, 100], [900, 1000])

同样,没有显示任何数字,但生成了返回值:

<matplotlib.collections.PathCollection at 0x7fb5fc0a7c10>

然后我可以通过在另一个单元格中调用 
fig

来查看更新后的图形,但同样没有附加任何轴:

幕后发生了什么?为什么我不能重新显示轴?

感谢大家提供的任何见解。

附注我假设这是一个重复的问题,但我根本找不到答案。如果重复,请添加链接。

python matplotlib jupyter figure axes
1个回答
0
投票
pyplot

类对象中存储的任何内存。这使得人们可以在单元之间不受惩罚地使用

pyplot
对象,而不会在下游产生任何问题。如果您尝试向下游传递轴对象,这也适用于所有轴实例。例如:

细胞1

from matplotlib import pyplot as plt %matplotlib inline # not necessary here, but is after plt.ioff() plt.ion() plt.plot([0, 1], [0, 1])

应该产生正常的绘图。

细胞2

plt.plot()

空地。

为了防止其被清除,请使用

plt.ioff()

 命令或较新的宏 
%matplotlib agg(我没有使用过它,但在您链接的帖子中
here
找到了它)。因此,请“关闭”交互模式以利用多个单元格来创建图像,并在您明确想要显示绘图的任何地方使用 plt.show() 。尝试下面的例子:

细胞1

from matplotlib import pyplot as plt plt.ioff() plt.plot([0, 1], [0, 1])

除非明确说明 
plt.show

,否则不会绘制任何内容。

细胞1

plt.plot([1, 0], [1, 0]) plt.show()

应显示两条线。


© www.soinside.com 2019 - 2024. All rights reserved.