【问题标题】:How do I show the same matplotlib figure several times in a single IPython notebook?如何在单个 IPython 笔记本中多次显示相同的 matplotlib 图?
【发布时间】:2016-07-15 22:15:42
【问题描述】:

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

例如,假设我有一些散点图的 x-y 数据对。我想显示这些点,然后显示几个单元格 - 可能与其他调用 pyplot 以制作其他不相关的数字 - 我想再次显示该数字,以便我可以用回归线或一些其他图形。

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

本质上,我想再次显示该图而不重复所有代码。我有什么选择这样做?我无法通过调用 show() 或 draw() 或将单元格中的当前图形对象设置为我保存的图形对象来完成此操作。欢迎任何建议。谢谢!

附:我知道如果我重用图形并在其上绘图,对象将会改变,因此 fig 对象的状态可能与在之前的 IPython 单元格中绘制的绘图不匹配。这对我的工作来说没问题。

Example IPython notebook

【问题讨论】:

标签: matplotlib ipython jupyter jupyter-notebook


【解决方案1】:

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

例如在单元格 1 中:

In [1]:
myFigure, myAx = plt.subplots()
myAx.plot([1,2,3])

在那之后的单元格中:

In [2]:
myFigure

这将显示myFigure

【讨论】:

  • 如果你有一个由几个不同的函数调用产生的复杂图形(例如,一些来自seaborn,一些来自matplotlib等)并且不清楚如何获取图形对象,只需在生成绘图的单元格的最后执行full_fig = plt.gcf(),并在下一个单元格中执行full_fig。
【解决方案2】:

假设您在 Jupyter Notebook 中使用默认的 matplotlib 后端 (%matplotlib inline)。

然后,要在笔记本中显示绘图,您必须显示图形。有 3 种方法可以做到这一点。

  1. 当单元格完成运行时,将自动显示任何刚刚创建的非闭合图(另请参阅this answer 了解如何关闭图)。这发生在您运行第一个单元格时。

  2. 将fig(matplotlib.figure.Figure 实例)放在任何单元格的末尾。

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

  3. 使用IPython.display.display(fig)。

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

【讨论】:

  • 您好!为什么我们需要在最后一行使用无花果?例如,此代码适用于当前块,但也适用于其他块。我需要改变什么吗?谢谢plot_depression, ax = plt.subplots() ax=sns.lineplot(x="time", y="value", hue = "Group", ci=90, err_style='bars', data=df_long) ax.set(xlabel = "Time", ylabel = "Result") ax.set_title('Trajectory of depression during the pandemic', size=20) # Put the legend out of the figure plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)
  • @Luis 我想答案已经解释过了? “(这对于每个对象类型都是相同的。如果您执行一个内容为 1 的单元格,它将在输出中显示 1,但 1;不会显示任何内容)”还是第 1 点的情况? “任何 [...] 都会自动显示”
猜你喜欢
  • 1970-01-01
  • 2017-01-25
  • 1970-01-01
  • 2016-02-24
  • 2014-12-26
  • 2014-07-16
  • 2013-10-24
相关资源
最近更新 更多