【问题标题】:display content of graphs in matplotlib inmmediately立即在 matplotlib 中显示图形的内容
【发布时间】:2016-08-18 07:08:56
【问题描述】:

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

【问题讨论】:

标签: python matplotlib enthought


【解决方案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)

这对我有用。

【讨论】:

  • 感谢您的回答。不幸的是,在我的情况下它也不起作用。另一方面,如果我将 Canopy 中的后端从 interactive(Qt4) 更改为 interactive(wx),你的代码和我的代码都可以工作!
【解决方案2】:

正如 Ed Smith 所说,只有第一次调用 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()

【讨论】:

    猜你喜欢
    • 2016-05-19
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多