Matplotlib:用户定义的绘图功能打印两次

时间:2016-02-16 03:10:51

标签: python matplotlib

我想创建一个带有功能的情节,它会在稍后返回一个无花果,我可以在需要时重新显示它。

功能如下:

def simple_plot(ax = None):
    if ax is None:
        fig, ax = plt.subplots()
    a = [1,2,3,4]
    b = [3,4,5,6]
    plt.plot(a, b,'-', color='black')
    return fig

如果我运行simple_plot(),它会打印两次图,如下所示:

enter image description here

注意:如果我运行fig = simple_plot(),它只会打印一次,我可以使用fig稍后在Ipython Notebook

中重现该情节
  1. 如果我运行simple_plot(),如何只打印一次?

  2. 我不确定我是否正确定义了这个函数,定义一个函数来制作图是一个好方法吗?

3 个答案:

答案 0 :(得分:12)

这是Jupyter笔记本电脑自动显示功能的副作用。每当你拨打plt.plot()时,它都会触发情节的显示。但是,每当图形对象被引用为单元格的最后一个语句时,触发另一个显示。当单元格中的最后一个语句是作业(fig = simple_plot())时,不会触发最后一个显示,因此您不会看到第二个图表。

为了防止显示第二个图(或自动显示任何原始引用),只需在单元格中最后一个语句的末尾添加一个分号。例如。调用simple_plot();只会显示一个图。

答案 1 :(得分:4)

只需在plt.close()之前添加return,就像这样:

def simple_plot(ax = None):
    if ax is None:
        fig, ax = plt.subplots()
    a = [1,2,3,4]
    b = [3,4,5,6]
    plt.plot(a, b,'-', color='black')
    plt.close()
    return fig

答案 2 :(得分:1)

删除你的退货声明

Ipython Notebook在您执行plt.plot(a, b,'-', color='black')时绘制一次,在您将fig对象返回到控制台时再绘制一次。

你也可以保留return语句,但是将返回的值存储到变量中,只需执行fig就可以重新绘制图形。

enter image description here