我在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),它将按预期工作。
答案 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)