在过go 的几天里,我一直在玩Numpy和matplotlib.我在try 让matplotlib在不阻塞执行的情况下绘制函数时遇到了问题.我知道这里已经有很多帖子在问类似的问题,我已经用谷歌搜索了相当多,但都没能做到这一点.

我试过按照一些人的建议使用SHOW(挡路=FALSE),但是我得到的只是一个冻结的窗口.如果我简单地调用show(),结果会正确绘制,但执行会被阻止,直到窗口关闭.从我看过的其他帖子来看,我怀疑SHOW(挡路=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()

另外,我忘了说我想在每次绘图时更新现有窗口,而不是创建一个新窗口.

推荐答案

我花了很长时间寻找解决方案,找到了this answer个.

看起来,为了得到你(和我)想要的东西,你需要plt.ion()plt.show()(不是block=False)和最重要的plt.pause(.001)(或者你想要的任何时间)的组合.之所以需要pause,是因为GUI事件在主代码Hibernate 时发生,包括绘图.这可能是通过从Hibernate 线程获取时间来实现的,所以也许IDE会扰乱这一点-我不知道.

下面是一个在python 3.5上适用的实现:

import numpy as np
from matplotlib import pyplot as plt

def main():
    plt.axis([-50,50,0,10000])
    plt.ion()
    plt.show()

    x = np.arange(-50, 51)
    for pow in range(1,5):   # plot x^1, x^2, ..., x^4
        y = [Xi**pow for Xi in x]
        plt.plot(x, y)
        plt.draw()
        plt.pause(0.001)
        input("Press [enter] to continue.")

if __name__ == '__main__':
    main()

Python相关问答推荐

将每个关键字值对转换为pyspark中的Intramame列

使用decorator 自动继承父类

Pandas使用过滤器映射多列

合并同名列,但一列为空,另一列包含值

从单个列创建多个列并按pandas分组

Numpy索引argsorted使用integer数组,同时保留排序顺序

有没有方法可以修复删除了换码字符的无效的SON记录?

如何将Matplotlib的fig.add_axes本地坐标与我的坐标关联起来?

使用图片生成PDF Django rest框架

在编写要Excel的数据透视框架时修复标题行

Pandas 填充条件是另一列

Deliveryter Notebook -无法在for循环中更新matplotlib情节(保留之前的情节),也无法使用动画子功能对情节进行动画

Matlab中是否有Python的f-字符串等效物

删除任何仅包含字符(或不包含其他数字值的邮政编码)的观察

使用索引列表列表对列进行切片并获取行方向的向量长度

按顺序合并2个词典列表

通过pandas向每个非空单元格添加子字符串

try 将一行连接到Tensorflow中的矩阵

Godot:需要碰撞的对象的AdditionerBody2D或Area2D以及queue_free?

Pandas DataFrame中行之间的差异