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

时间:2016-08-18 07:08:57

标签: python matplotlib enthought

我在Win7机器中使用Canopy,启用了%pylab和交互式(Qt4)作为后端。恕我直言,我得到了我认为matplotlib的奇怪行为。

如果代码是逐行执行的,那么图形的框架将按照我的预期显示,但不会显示图形本身的内容。如果在绘图之后,我需要有关这些图表的信息,因为我无法看到它们,我无法正确回答。一旦我用虚拟答案回答问题,图表就会出现。

我想要实现的是图表在询问问题之前显示,以便提供回复信息。

提前致谢。

这是一个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中的后端从交互式(Qt4)更改为交互式(wx),它将按预期工作。

2 个答案:

答案 0 :(得分:1)

如果我理解,问题是plt.show会阻止,第二个数字在第一个关闭之前不会被绘制。对于不同的后端,行为可能会有所不同,但您不应多次调用show(请参阅matplotlib show() doesn't work twice)。我建议在这里使用两个subplots并且可能将阻塞关闭为raw_input块,您可以输入显示该图的输入。你的代码看起来像这样,

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)

对我有用。

答案 1 :(得分:1)

正如埃德史密斯所说,只有第一次拨打plt.show()才有效。 如果要强制重绘图形,可以使用figure.canvas.draw()

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

enter image description here