【发布时间】:2015-03-31 21:25:09
【问题描述】:
最近几天我一直在玩 Numpy 和 matplotlib。我在尝试使 matplotlib 绘制一个函数而不阻塞执行时遇到问题。我知道这里已经有很多关于 SO 的帖子在问类似的问题,我已经用谷歌搜索了很多,但还没有成功。
我已尝试按照某些人的建议使用 show(block=False),但我得到的只是一个冻结的窗口。如果我只是调用 show(),结果会被正确绘制,但执行会被阻止,直到窗口关闭。从我读过的其他线程中,我怀疑 show(block=False) 是否有效取决于后端。它是否正确?我的后端是 Qt4Agg。你能看看我的代码,如果你发现有问题告诉我吗?这是我的代码。感谢您的帮助。
from math import *
from matplotlib import pyplot as plt
print(plt.get_backend())
def main():
x = range(-50, 51, 1)
for pow in range(1,5): # plot x^1, x^2, ..., x^4
y = [Xi**pow for Xi in x]
print(y)
plt.plot(x, y)
plt.draw()
#plt.show() #this plots correctly, but blocks execution.
plt.show(block=False) #this creates an empty frozen window.
_ = raw_input("Press [enter] to continue.")
if __name__ == '__main__':
main()
PS。我忘了说我想在每次绘制某些东西时更新现有窗口,而不是创建一个新窗口。
【问题讨论】:
-
您在
plt.show()之前尝试过plt.ion()的matplotlib 交互模式吗?然后它应该是非阻塞的,因为每个图都生成到一个子线程中。 -
@Anzel 我刚试过,但似乎没什么区别。
-
你是如何运行你的脚本的?如果我从终端/命令提示符运行您的示例代码,它似乎工作正常,但我认为我过去在尝试从 IPython QtConsole 或 IDE 执行此类操作时遇到了麻烦。
-
@Marius 啊哈!!你说的对。事实上,我是从我的 IDE (PyCharm) 的控制台运行它的。从 cmd 提示符运行时,plt.show(block=False) 工作正常!如果我问你是否找到任何想法/解决方案,我会问太多吗?非常感谢!
-
我真的不知道对不起。我不太了解 matplotlib 如何与控制台交互的细节,所以如果我需要使用
matplotlib做这些事情,我通常只是切换到从命令提示符运行。
标签: python matplotlib plot