Dil*_*rix 7 python plot matplotlib
我想让python制作一个绘图,在不阻塞控制流的情况下显示它,并在代码退出后保持打开.这可能吗?
这个以及相关的主题在许多其他主题中都存在(见下文),但是我无法让这个情节保持开放,并且是非阻塞的.例如,如果我pyplot.ion()之前使用过pyplot.show(),或者如果我使用,pyplot.show(block=False)那么当代码终止时,该图将关闭.这是真的使用python或ipython.如果重要的话,我正在运行OS X 10.8.2(Mountain Lion),运行python27和ipython27
相关讨论:
pylab matplotlib"show"等到窗口关闭
有没有办法分离matplotlib图,以便计算可以继续?
在Matplotlib Closing pyplot窗口中保持绘图窗口打开
在Linux上,您可以通过以下方式分离显示:
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import numpy as np
import os
def detach_display():
mu, sigma = 0, 0.5
x = np.linspace(-3, 3, 100)
plt.plot(x, mlab.normpdf(x, mu, sigma))
plt.show()
if os.fork():
# Parent
pass
else:
# Child
detach_display()
Run Code Online (Sandbox Code Playgroud)
主要过程结束,但情节仍然存在.
尝试#2.这也适用于Linux; 你可以尝试一下:但不是OS X.
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import numpy as np
import os
import multiprocessing as mp
def detach_display():
mu, sigma = 0, 0.5
x = np.linspace(-3, 3, 100)
plt.plot(x, mlab.normpdf(x, mu, sigma))
plt.show()
proc = mp.Process(target=detach_display)
proc.start()
os._exit(0)
Run Code Online (Sandbox Code Playgroud)
没有os._exit(0),主要过程块.按Ctrl-C会杀死主进程,但绘图仍然存在.
随着os._exit(0),主要过程结束,但情节仍然存在.
叹.尝试#3.如果将matplotlib调用放在另一个脚本中,那么可以像这样使用子进程:
show.py:
import matplotlib.pyplot as plt
import numpy as np
import sys
filename = sys.argv[1]
data = np.load(filename)
plt.plot(data['x'], data['y'])
plt.show()
Run Code Online (Sandbox Code Playgroud)
test.py
import subprocess
import numpy as np
import matplotlib.mlab as mlab
mu, sigma = 0, 0.5
x = np.linspace(-3, 3, 100000)
y = mlab.normpdf(x, mu, sigma)
filename = '/tmp/data.npz'
np.savez(filename, x=x, y=y)
proc = subprocess.Popen(['python', '/path/to/show.py', filename])
Run Code Online (Sandbox Code Playgroud)
运行test.py时应显示绘图并将控制返回到终端,同时显示绘图.
| 归档时间: |
|
| 查看次数: |
3971 次 |
| 最近记录: |