Python 立即在matplotlib中显示图形内容

Python 立即在matplotlib中显示图形内容,python,matplotlib,enthought,Python,Matplotlib,Enthought,我在Win7机器中使用Canopy,启用了%pylab,并将交互(Qt4)作为后端。嗯,我得到了我认为的一个奇怪的行为 MatPultLIB < /C> 如果代码是逐行执行的,那么图的帧会如我所期望的那样出现,而不是图本身的内容。如果在绘图之后,我需要关于这些图形的信息,因为我看不到它们,我无法正确回答。一旦我用假答案回答了这个问题,图表就会出现 我想实现的是,在提问之前显示图表,以便获得回答信息 提前谢谢 这是一个MWE import numpy as np import matplotlib

我在Win7机器中使用Canopy,启用了
%pylab
,并将交互(Qt4)作为后端。嗯,我得到了我认为的一个奇怪的行为<代码> MatPultLIB < /C> 如果代码是逐行执行的,那么图的帧会如我所期望的那样出现,而不是图本身的内容。如果在绘图之后,我需要关于这些图形的信息,因为我看不到它们,我无法正确回答。一旦我用假答案回答了这个问题,图表就会出现

我想实现的是,在提问之前显示图表,以便获得回答信息

提前谢谢

这是一个MWE

import numpy as np
import matplotlib.pyplot as plt

N = 8
y = np.zeros(N)
x1 = np.linspace(0, 10, N, endpoint=True)
x2 = np.linspace(0, 10, N, endpoint=False)
plt.figure()
plt.plot(x1, y, 'o')
plt.plot(x2, y + 0.5, 'o')
plt.ylim([-0.5, 1])
plt.show()


y1 = np.random.random(8)
plt.figure()
plt.plot(x1, y1)
plt.show()

dummy = raw_input("What is the third point in the second graph?")

编辑:如果我将Canopy中的后端从interactive(Qt4)更改为interactive(wx),它将按预期工作。

如果我理解,问题是
plt.show
将被阻止,并且在第一个图形关闭之前不会绘制第二个图形。对于不同的后端,行为可能会有所不同,但您不应多次调用show(请参阅)。我建议在这里使用两个
子窗口
,也许可以关闭块作为原始输入块,然后您可以输入一个如图所示的输入。您的代码将如下所示

import numpy as np
import matplotlib.pyplot as plt

N = 8
y = np.zeros(N)
x1 = np.linspace(0, 10, N, endpoint=True)
x2 = np.linspace(0, 10, N, endpoint=False)
fig,ax = plt.subplots(2,1)
ax[0].plot(x1, y, 'o')
ax[0].plot(x2, y + 0.5, 'o')
ax[0].set_ylim([-0.5, 1])

y1 = np.random.random(8)
ax[1].plot(x1, y1)
plt.show(block=False)

dummy = raw_input("What is the third point in the second graph?")
print("dummy = ", dummy)

这对我很有效。

正如Ed Smith所说,只有对
plt.show()的第一次调用有效。
如果要强制重新绘制地物,可以使用
figure.canvas.draw()


请查看,谢谢您的回答。不幸的是,对我来说也不起作用。另一方面,如果我将Canopy中的后端从interactive(Qt4)更改为interactive(wx),那么您的代码和我的代码都可以工作!
import matplotlib.pyplot as plt

fig = plt.figure()
plt.plot([0, 1], [2, 3])
plt.show()

#do more stuff, get user input

plt.plot([5,6], [-7, -8])
fig.canvas.draw()