这是我一段时间以来一直想要答案的问题。我花了很多时间寻找 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
来查看更新后的图形,但同样没有附加任何轴:
幕后发生了什么?为什么我不能重新显示轴?感谢大家提供的任何见解。
附注我假设这是一个重复的问题,但我根本找不到答案。如果重复,请添加链接。
pyplot
类对象中存储的任何内存。这使得人们可以在单元之间不受惩罚地使用
pyplot
对象,而不会在下游产生任何问题。如果您尝试向下游传递轴对象,这也适用于所有轴实例。例如:
细胞1from 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()
空地。
为了防止其被清除,请使用
命令或较新的宏
%matplotlib agg
(我没有使用过它,但在您链接的帖子中here找到了它)。因此,请“关闭”交互模式以利用多个单元格来创建图像,并在您明确想要显示绘图的任何地方使用 plt.show() 。尝试下面的例子: 细胞1
from matplotlib import pyplot as plt
plt.ioff()
plt.plot([0, 1], [0, 1])
除非明确说明
plt.show
,否则不会绘制任何内容。
细胞1plt.plot([1, 0], [1, 0])
plt.show()
应显示两条线。