【问题标题】:How to prevent ipython shutting down interactive mode while running a script如何防止ipython在运行脚本时关闭交互模式
【发布时间】:2014-05-19 15:30:47
【问题描述】:

本页讨论使用 ipython 进行交互式绘图:http://matplotlib.org/users/shell.html

根据该页面,默认情况下,用于在 ipython 中运行脚本的 %run 命令会关闭交互模式。是否也可以选择以交互模式运行脚本?

我希望脚本中的绘图命令在运行后立即在绘图图中生效,就像从控制台交互式输入一样。

例如,考虑以下非常简单的脚本:

# try.py:
# run in ipython that is started with 
# ipython --pylab
# using 
# %run -i try.py

from numpy import *
from time import sleep

ion()
x = randn(10000)
hist(x,100)
show()
sleep(5)
xlabel('labalu')

当按照注释中的指示从 ipython 运行时,此脚本会等待 5 秒,然后显示所有内容。我想要的是:从 ipython 运行时,如注释中所示,脚本应立即显示直方图,等待 5 秒,然后更新图形以显示 x 标签。

【问题讨论】:

    标签: python matplotlib ipython


    【解决方案1】:

    移动ion() 所以它在show() 之后做我认为你想要的。为什么它不在更高的位置,我不知道。

    【讨论】:

    • 没有。它不是。顺便说一句,我在带有 python 2.7 的 Windows 7 上。这对你有用吗?
    • 是的,适用于 Mac 和 Windows 8(在这些用途上相当于 Win7),都使用 Enthought Canopy (Python 2.7),使用 Qt 作为 pylab 后端。这是 ipython 2.0。您是否删除了开头的 ion() ?
    • 我做到了。可能是我的 ipython 版本太旧或什么:0.13.1
    • 确实已经一岁多了。此后的两个主要版本。强烈推荐更新。
    【解决方案2】:

    如果使用 wx 作为后端,以下工作:

    #run in ipython that is started with ipython --pylab=wx
    from numpy import *
    import matplotlib
    matplotlib.use('WX')
    import wx
    from time import sleep
    import numpy as np
    import matplotlib.pyplot as plt
    
    plt.ion()
    x = np.random.uniform(0,1,100)
    plt.plot(x)
    plt.show()
    wx.Yield()
    for i in reversed(range(5)):
        print(i)
        sleep(1)
    plt.xlabel('labl')
    wx.Yield()
    

    所以,wx.Yield() 允许与图形窗口进行交互。这也适用于使用普通 python 运行脚本时,但在脚本结束时图形会自动关闭。

    任何跨后端解决方案(或 qt/tk 的解决方案)仍然很好。

    【讨论】:

      【解决方案3】:

      下面是一个适用于 wx 和 qt 后端的解决方案。 gcf().canvas.flush_events() 可以解决问题。

      # try.py:
      # run in ipython that is started with 
      # ipython --pylab
      # using 
      # %run -i try.py
      
      from numpy import *
      import matplotlib
      from time import sleep
      
      x = randn(10000)
      hist(x,100)
      show()
      ion()
      gcf().canvas.flush_events() 
      sleep(5)
      xlabel('labalu')
      show()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-15
        • 1970-01-01
        • 2019-08-26
        • 2011-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多