python - 代码终止后保持 matplotlib/pyplot 窗口打开

标签 python matplotlib plot

我希望 python 绘制一个绘图,在不阻塞控制流的情况下显示它,并在代码退出后让绘图保持打开状态。这可能吗?

这个和相关主题存在于许多其他线程中(见下文),但我无法让情节既保持开放又非阻塞。例如,如果我在 pyplot.show() 之前使用 pyplot.ion(),或者如果我使用 pyplot.show(block=False) 然后当代码终止时情节关闭。使用 pythonipython 都是如此。如果重要的话,我在 OS X 10.8.2 (Mountain Lion) 上运行,运行 python27ipython27

相关讨论:
pylab matplotlib "show" waits until window closes
Is there a way to detach matplotlib plots so that the computation can continue?
Keep plotting window open in Matplotlib
Closing pyplot windows

最佳答案

在 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()

主流程结束,但剧情依旧。


尝试#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)

如果没有 os._exit(0),主进程就会阻塞。按 Ctrl-C 会终止主进程,但情节仍然存在。

随着 os._exit(0),主进程结束,但情节仍然存在。


叹息。尝试#3。如果您将 matplotlib 调用放在另一个脚本中,那么您可以像这样使用子进程:

显示.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()    

测试.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])

运行 test.py 应该显示一个绘图并将控制权返回到终端,同时保持绘图显示。

关于python - 代码终止后保持 matplotlib/pyplot 窗口打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15454586/

相关文章:

r - 获取数据的概率密度

python - 如何从绘图中完全删除 x 轴(和 y 轴)并使用 Python 或 R 编程在某些点绘制切线?

python - openCV中numpy.uint8和numpy.int8的区别?

python - 创建一个以数据帧为参数并返回最小值和最大值的函数

python - 在不创建辅助数组的情况下使用 imshow 绘制数组时,将特定颜色分配给数组的值

python - FacetGrid Seaborn 中每个图的 binwidth 不同

python - 迭代嵌套列表以获取键值对

python - 使用 Python 解析和重新格式化 CSV/文本数据

python - 拉普拉斯语的opencv失败并显示cv2。错误:OpenCV(4.1.2)

python - 在 x 轴上根据时间绘制数据并使用 python 实时调整它