Matplotlib离子()和子流程(Matplotlib ion() and subprocess

2019-06-26 06:53发布

我想有一个情节弹出,使用户可以确认一个合适的工作,但不挂断整个过程这么做。 然而,在出现的窗口中,从来就没有了什么东西,它是“没有响应”。 我怀疑存在与子功能的不良相互作用,因为这代码是前结束和用C正在运行一个仿真数据处理++。

import subprocess
import numpy as np
from matplotlib import pyplot as mpl
...
mpl.ion()
fig = mpl.figure()
ax = fig.add_subplot(1,1,1)
ax.grid(True)
ax.plot(x, y, 'g')
ax.scatter(X, Y, c='b')
ax.scatter(min_tilt, min_energy, c='r')
mpl.draw()
...
subprocess.call(prog)

下面的子确实打开。 如果我删除ion()调用和使用mpl.show()则积工作正常,但直到窗口被关闭的整个过程举起。 我需要的进程继续,而用户看到的图形。 有没有办法做到这一点?

Answer 1:

相反,mpl.draw()的,请尝试:

mpl.pause(0.001)

使用matplotlib交互模式时离子()。 请注意,这只是从matplotlib 1.1.1 RC或更高的工作。



Answer 2:

这可能是矫枉过正,但因为没有人有没有更好的办法我去线程模块和它的工作。 如果任何人有一个简单的方法来做到这一点,请让我知道。

import subprocess
import threading
from matplotlib import pyplot as mpl
...
class Graph(threading.Thread):
   def __init__(self,X,Y,min_tilt, min_energy):
       self.X = X
       self.Y = Y
       self.min_tilt = min_tilt
       self.min_energy = min_energy
       threading.Thread.__init__(self)

   def run(self):
       X = self.X
       Y = self.Y
       dx = (X.max()-X.min())/30.0
       x = np.arange(X.min(),X.max()+dx,dx)
       y = quad(x,fit)
       fig = mpl.figure()
       ax = fig.add_subplot(1,1,1)
       ax.grid(True)
       ax.plot(x, y, 'g')
       ax.scatter(X, Y, c='b')
       ax.scatter(self.min_tilt, self.min_energy, c='r')
       mpl.show()
thread = Graph(X,Y,min_tilt,min_energy)
thread.start()


文章来源: Matplotlib ion() and subprocesses