【问题标题】:Spyder: refresh existing plot window instead of opening a new oneSpyder:刷新现有的绘图窗口而不是打开一个新的
【发布时间】:2017-08-27 14:32:21
【问题描述】:

我想在单独的窗口中显示绘图。目前我将 IPython 图形后端设置为“自动”。

当我重新运行代码(或绘制另一个图形)时,Spyder 会打开一个新的绘图窗口。是否可以刷新已经打开的窗口中的图而不是打开一个新的?

【问题讨论】:

    标签: python matplotlib ipython spyder


    【解决方案1】:

    调用plt.show() 时打开的GUI 窗口绑定到一个图形。你不能改变里面的图形。 (嗯,准确地说,可能有从操作系统获取句柄并操作其内容的选项,但我认为这不值得。)

    重新运行代码实际上意味着您生成了一个新图形,因为代码不知道它之前已经运行过。

    因此,交换图形或重复使用窗口来绘制不同的图形是不可能的。

    然而,可以使用图形并在图形打开时对其进行操作。这是通过plt.ion() 完成的。在 IPython 中调用此命令后,您可以调整图形,例如向其添加新行等。

    看这个例子:

    IN [6] 窗口打开,当IN [7] 执行时,图形保持打开状态,内容发生变化。

    【讨论】:

    • 不是我希望的解决方案,但至少现在我明白发生了什么。谢谢你的解释!
    【解决方案2】:

    当然,在同一个运行内核中使用 Spyder 是可能的。尝试使用 num 作为plt.figure() 的参数的以下示例,其中 num 将始终引用同一个图形并在已打开的情况下刷新它。也适用于plt.subplots()

    import matplotlib.pyplot as plt
    
    from scipy import *
    t = linspace(0, 0.1,1000)
    w = rand(1)*60*2*pi
    
    fig = plt.figure(num=10, clear=True, figsize = [10,8])
    plt.plot(t,cos(w*t))
    plt.plot(t,cos(w*t-2*pi/3))
    plt.plot(t,cos(w*t-4*pi/3))
    

    【讨论】:

      猜你喜欢
      • 2014-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-11
      • 1970-01-01
      • 2016-09-12
      • 1970-01-01
      • 2018-05-02
      相关资源
      最近更新 更多