我读了很多关于这个主题的堆栈溢出问题,但经过大量的实验,我无法弄清楚我的问题。
我在Windows 7上使用PyCharm 2016.3.2(但我在OSX上遇到同样的问题),我的解释器是使用Python 3.6和matplotlib 2.0.0的Anaconda的最后一个版本。
这是我尝试实现的目标(也许我没有使用正确的方法,因为我正在尝试重新创建我在Octave / Matlab中使用的行为):
这是我的测试代码:
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
print('Plotting Data...')
plt.ion()
plt.figure(1)
plt.plot([1, 5, 10, 20], [1, 5, 10, 20])
plt.xlabel('x label')
plt.ylabel('y label')
plt.show()
plt.pause(0.0001)
input('Plotting Data done..., Press a key to continue')
plt.figure(1)
plt.plot([1, 5, 10, 20], [2, 10, 20, 40])
plt.show()
plt.pause(0.0001)
input('Program paused. Press enter to end.\n')
这是我想要的最接近的版本,图表是正确的,但是当我将鼠标悬停在它们上时没有响应(plt.pause(0.0001)生成警告但代码有效)。
我玩了很多参数(plt.ion(); plt.pause(); plt.show(block = False))。 大多数情况下,这会导致空图窗口或我需要关闭窗口以继续执行。
感谢您的帮助!
答案 0 :(得分:0)
调用plt.show()
后,主循环将由Window接管。因此,只要input
被调用,主循环就会变得无法响应。
您可以尝试保持GUI循环并按下那里的按键。
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
print('Plotting Data...')
fig, ax = plt.subplots()
ax.set_xlabel('x label')
ax.set_ylabel('y label')
i=[0]
def f1():
ax.plot([1, 5, 10, 20], [1, 5, 10, 20])
def f2():
ax.plot([1, 5, 10, 20], [2, 10, 20, 40])
def f3():
ax.plot([1, 5, 10, 20], [5, 9, 17, 28])
def update(event=None):
if i[0]==0: f1()
if i[0]==1: f2()
if i[0]==2: f3()
fig.canvas.draw_idle()
i[0]+=1
print('Step {} done..., Press a key to continue'.format(i[0]))
fig.canvas.mpl_connect("key_press_event", update)
update()
plt.show()