如何在单个IPython笔记本中多次显示相同的matplotlib图形?

如何在单个IPython笔记本中多次显示相同的matplotlib图形?,matplotlib,ipython,jupyter,jupyter-notebook,Matplotlib,Ipython,Jupyter,Jupyter Notebook,我将IPython笔记本电脑与matplotlib.pyplot一起使用,并且我经常创建需要相当大的代码块才能生成的绘图。然后我想保存该对象,并使用完全相同的图形/轴对在稍后的另一个绘图中合并 例如,假设我有一些散点图的x-y数据对。我想先显示点,然后再显示几个单元格——可能需要调用pyplot来生成其他不相关的图形——我想再次显示该图形,这样我就可以用回归线或其他图形在上面进行绘图 在我附在下面的图片中,我有一个简短的笔记本;我希望第2单元中的图形在第3单元中绘制,而不需要再次调用pyplot

我将IPython笔记本电脑与matplotlib.pyplot一起使用,并且我经常创建需要相当大的代码块才能生成的绘图。然后我想保存该对象,并使用完全相同的图形/轴对在稍后的另一个绘图中合并

例如,假设我有一些散点图的x-y数据对。我想先显示点,然后再显示几个单元格——可能需要调用pyplot来生成其他不相关的图形——我想再次显示该图形,这样我就可以用回归线或其他图形在上面进行绘图

在我附在下面的图片中,我有一个简短的笔记本;我希望第2单元中的图形在第3单元中绘制,而不需要再次调用pyplot.scatter

本质上,我希望在不重复所有代码的情况下再次显示该图。我的选择是什么?我无法通过调用show()或draw()或将单元格中的当前地物对象设置为我保存的地物对象来完成此操作。欢迎任何建议。谢谢

另外,我知道如果重复使用图形并在其上绘图,对象将发生变化,因此fig对象的状态可能与以前IPython单元格中绘制的绘图不匹配。这对我的工作没关系


在之前的单元格中分配了
myFigure
之后,只需在任何单元格中调用
myFigure

例如,在单元格1中:

In [1]:
myFigure, myAx = plt.subplots()
myAx.plot([1,2,3])
在这之后的单元格中:

In [2]:
myFigure

假设您在Jupyter笔记本中使用默认的matplotlib后端(
%matplotlib inline
),这将显示myFigure

然后,要在笔记本中显示绘图,您必须显示图形

  • 单元格运行完成后,将自动显示任何刚创建的非闭合绘图(另请参见如何关闭绘图)。这是在运行第一个单元格时发生的

  • fig
    (一个
    matplotlib.figure.figure
    实例)放在任何单元格的末尾

    此方法已在其他现有答案中提到,但请注意,它必须位于最后一行,并且不得有尾随的
    。(这对于每种对象类型都是相同的。如果执行内容为
    1
    的单元格,它将在输出中显示
    1
    ,但
    1;
    将不显示任何内容)

  • 使用


  • 请注意,
    print(fig)
    不起作用,因为这只会将图形的字符串表示形式发送到
    sys.stdout
    (因此类似
    的内容会显示在笔记本中)。

    可能相关:如果您有一个由多个不同函数调用生成的复杂图形(例如,一些来自
    seaborn
    ,一些来自
    matplotlib
    ,等等)并且不清楚如何获取figure对象,只需在生成绘图的单元格的最末端执行
    full_fig=plt.gcf()
    ,然后在下一个单元格中执行
    full_fig