【问题标题】:IPython: How to show the same plot in different cells?IPython:如何在不同的单元格中显示相同的图?
【发布时间】:2016-08-03 21:41:59
【问题描述】:

总的来说,我对 IPython Notebooks、Jupyter 和 Python 还是很陌生。

我正在使用以下代码在 Jupyter 笔记本中创建散点图:

import numpy as np
import matplotlib.pyplot as plt

n = 1024
X = np.random.normal(0, 1, n)
Y = np.random.normal(0, 1, n)
plt.axes([0.025, 0.025, 0.95, 0.95])
plt.scatter(X, Y, s=50)

plt.show()

我的问题是,如何获得对绘图对象的引用,以便稍后在笔记本的不同单元格中使用它?此外,我可能需要在再次显示之前修改绘图。

另外,我的笔记本顶部有%matplotlib inline。

以下是关于我的环境的一些信息:

  • Python: 3.5.2 64 位 [MSC v.1900 64 位 (AMD64)]
  • IPython: 4.2.0
  • numpy: 1.11.1
  • scipy: 0.17.1
  • ma​​tplotlib: 1.5.1
  • 同情: 1.0
  • 操作系统: Windows 7 6.1.7601 SP1

【问题讨论】:

  • 抱歉挖出了这个问题。我的解决方法是在新单元格中调用 fig.savefig 以保存到图像文件并在自动刷新以显示当前副本的查看器(例如 EyeOfGnome)中打开图像。我仍然不知道如何在新的笔记本单元格中显示该图形。我认为这可能与 Jupyter 内部有关,尤其是 %matplotlib inline 指令。也许它会在某些后端工作。
  • 另一种解决方法是使用交互式后端:%matplotlib notebook。一个新的绘图命令将更新原始画布。但我相信这仍然不是我们想要的。

标签: python matplotlib ipython-notebook jupyter-notebook


【解决方案1】:

我找到了解决办法!基本上,您使用fig, ax = plt.subplots() 创建一个图形和轴,然后使用ax 变量进行绘制(可能在多个单元格中)。在要重新绘制图形的任何单元格中,只需将 fig 作为单元格的最后一行写入,从而使单元格使用更新后的图形作为输出。
请参阅我的回答 here 了解更多详情。

【讨论】:

    【解决方案2】:

    试试matplotlib的面向对象接口——matplotlib.figure;您可以根据需要使用创建的 Figure 对象的引用。

    • 创建一个图形对象 - fig = plt.figure()
    • 向其添加轴 - ax = fig.add_axes([0.025, 0.025, 0.95, 0.95])
    • 在创建的轴上绘图 - ax.plot(X, Y)

    【讨论】:

    • 如果我走这条路,我会在每次调用ax.scatter() 时创建scatter 情节。在我的笔记本中仍然没有按预期工作。
    猜你喜欢
    • 2016-07-15
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 2017-03-02
    相关资源
    最近更新 更多