CLI程序,显示matplotlib阴谋与计划

Possible Duplicate:
How to make the plot not disappear?CLI程序,显示matplotlib阴谋与计划

我写分析一些数据的命令行界面的Python程序进行。它要求用户一大堆的问题,并在脚本中matplotlib pyplot情节的非执行董事,以显示几个点,但我想说明它并继续脚本类似下面:

import matplotlib.pyplot as plt 

import numpy as np

plt.figure()

plt.plot(np.arange(10),np.arange(10)**2)

plt.show()

print 'continuing the program'

我曾尝试使用plt.draw()和subplots一起使用,但它在脚本中似乎不起作用。

编辑: 我用plt.ion()哪种除了情节窗户作品都是反应迟钝,并没有显示在工具等按钮变焦

回答:

plt.show()不会返回,直到用户关闭小部件/窗口。我很多情况下这种行为是好的。为什么剧本应该在用户花时间观看精彩的图形时进行呢? :-)但是,如果您要求您的程序继续,请使用threading模块。在一个新线程中调用plt.show(),并在让主线程终止之前调用join()这个线程。

编辑:

看起来事情并不那么简单。我创建了以下test.py

import threading 

from matplotlib import pyplot as p

import time

p.plot([_ for _ in xrange(5)])

t = threading.Thread(target=p.show)

t.start()

for i in xrange(5):

print "lala %s" % i

time.sleep(1)

print "Waiting for plot thread to finish..."

t.join()

print "Finished."

测试它会导致这个错误:

14:43:42 $ python test.py 

lala 0

lala 1

Exception in thread Thread-1:

Traceback (most recent call last):

File "/usr/lib/python2.6/threading.py", line 532, in __bootstrap_inner

self.run()

File "/usr/lib/python2.6/threading.py", line 484, in run

self.__target(*self.__args, **self.__kwargs)

File "/usr/lib/pymodules/python2.6/matplotlib/backends/backend_tkagg.py", line 73, in show

manager.show()

File "/usr/lib/pymodules/python2.6/matplotlib/backends/backend_tkagg.py", line 385, in show

if not self._shown: self.canvas._tkcanvas.bind("<Destroy>", destroy)

File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 988, in bind

return self._bind(('bind', self._w), sequence, func, add)

File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 938, in _bind

needcleanup)

File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 1101, in _register

self.tk.createcommand(name, f)

RuntimeError: main thread is not in main loop

我从这个是p.show()需要从主线程调用推断。也许你必须这样做:在另一个线程中获取用户输入。

以上是 CLI程序,显示matplotlib阴谋与计划 的全部内容, 来源链接: utcz.com/qa/257427.html

回到顶部