代码之家  ›  专栏  ›  技术社区  ›  Schütze

Matplotlib:如何不在同一图像上绘制[duplicate]

  •  0
  • Schütze  · 技术社区  · 6 年前

    Matplotlib提供以下功能:

    cla()   # Clear axis
    clf()   # Clear figure
    close() # Close a figure window
    

    文档并没有提供很多关于这些函数之间区别的信息。我应该什么时候使用每个函数,它具体做什么?

    0 回复  |  直到 6 年前
        1
  •  648
  •   spinkus    6 年前

    它们都做不同的事情,因为matplotlib使用一个分层顺序,其中一个图形窗口包含一个可能由多个轴组成的图形。另外,pyplot接口中有一些函数,在 Figure 上课。我将在下面讨论这两个案例。

    pyplot接口

    pyplot 是一个模块,它收集两个允许以函数方式使用matplotlib的函数。我在这里假设 pyplot公司 已导入为 import matplotlib.pyplot as plt . 在本例中,有三个不同的命令可以删除内容:

    plt.cla() clears an axes ,即当前图形中当前活动的轴。它使其他轴保持不变。

    plt.clf() clears the entire current figure 所有的轴都打开了,这样它就可以再用于其他绘图。

    plt.close() closes a window ,如果未另行指定,则它将是当前窗口。

    哪些功能最适合您,这取决于您的用例。

    这个 close() 函数还允许指定应关闭哪个窗口。参数可以是一个数字,也可以是在使用 figure(number_or_name) 或者它可以是一个图形实例 fig 获得,即使用 fig = figure() . 如果没有给 关闭() ,将关闭当前活动的窗口。此外,还有语法 close('all') ,关闭所有数字。

    Figure类的方法

    另外 数字 类提供清除数字的方法。 我在下面假设 无花果 数字 :

    fig.clf() clears the entire figure . 这个电话相当于 循环冷却液() 只有 无花果 是当前的数字。

    fig.clear() 图clf()

    注意,即使 del fig 不会关闭关联的图形窗口。据我所知,关闭图形窗口的唯一方法是使用 plt.close(fig) 如上所述。

        2
  •  70
  •   Heberto Mayorquin    7 年前

    我今天发现了一个警告。 如果有一个函数调用一个plot很多次,那么最好使用 plt.close(fig) 而不是 fig.clf() 不知怎的,第一个不在记忆中积累。简而言之 如果是内存问题,请使用plt.close(图) (虽然似乎有更好的方法,但请在本评论的末尾查看相关链接)。

    因此,以下脚本将生成一个空列表:

    for i in range(5):
        fig = plot_figure()
        plt.close(fig)
    # This returns a list with all figure numbers available
    print(plt.get_fignums())
    

    而这张表上有五位数字。

    for i in range(5):
        fig = plot_figure()
        fig.clf()
    # This returns a list with all figure numbers available
    print(plt.get_fignums())
    

    从上面的文档中我不清楚关闭一个图形和关闭一个窗口有什么区别。也许这会澄清。

    如果要在那里尝试完整的脚本,您可以:

    import numpy as np
    import matplotlib.pyplot as plt
    x = np.arange(1000)
    y = np.sin(x)
    
    for i in range(5):
        fig = plt.figure()
        ax = fig.add_subplot(1, 1, 1)
        ax.plot(x, y)
        plt.close(fig)
    
    print(plt.get_fignums())
    
    for i in range(5):
        fig = plt.figure()
        ax = fig.add_subplot(1, 1, 1)
        ax.plot(x, y)
        fig.clf()
    
    print(plt.get_fignums())
    

    如果记忆是一个问题,有人已经发布了一个工作,所以请看: Create a figure that is reference counted

        3
  •  9
  •   Felipe    6 年前

    分包商() 方法 清除电流轴

    循环冷却液() 方法 清除当前数字

    还有,还有 gca计划() (获取当前轴) 计划gcf() (获取当前数字)

    请在此处阅读更多内容: Matplotlib, Pyplot, Pylab etc: What's the difference between these and when to use each?