Matplotpib图中循环没有响应

时间:2016-09-22 16:30:20

标签: python numpy matplotlib

Python 2.7.11,Win 7,x64,Numpy 1.10.4,matplotlib 1.5.1

在命令行输入%matplotlib qt后,我从iPython控制台运行了以下脚本

from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import axes3d
import numpy as np

number = input("Number: ")
coords = np.array(np.random.randint(0, number, (number, 3)))

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(coords[:,0], coords[:,1], coords[:,2])
plt.show()

它在3D中绘制随机散射图。所以我认为将它放入while循环和放大器是一件小事。获得每次迭代的新数据。

from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import axes3d
import numpy as np

s = True
while s:

    number = input("Number: ")
    coords = np.array(np.random.randint(0, number, (number, 3)))

    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')
    ax.scatter(coords[:,0], coords[:,1], coords[:,2])
    plt.show()
    cont = input("Continue? (y/n)")
    if cont == 'n':
        s = False

......但数字只是空白&在我输入cont的输入之前没有反应,我得到了,

  

NameError:名称'y'未定义

......整个事情都崩溃了。

那我在这里错过了什么?

编辑:考虑到Aquatically challenged的答案如下。数字仍然会挂起,直到退出循环,然后它们都会同时绘制。有人知道为什么这些图没有在循环内完成吗?

2 个答案:

答案 0 :(得分:1)

我没有复制,但是当您输入'y''n'时。尝试将单引号(或双引号)设为yn

输入不带引号的字符串。使用raw_input代替input

如此处所述Python 2.7 getting user input and manipulating as string without quotations

答案 1 :(得分:1)

input尝试eval您键入的字符串,将其视为Python代码,然后返回评估结果。例如,如果result = input()我输入2 + abs(-3),则result将等于5

输入字符串y时,会将其视为变量名称。由于您尚未定义任何名为y的变量,因此您将获得NameError。而不是input您想要使用raw_input,它只返回输入字符串而不尝试评估它。

为了让你的数字在while循环中显示,你需要插入一个短暂的暂停,以便在继续执行while循环之前绘制图形的内容。您可以使用plt.pause,它还负责更新活动数字。

s = True
while s:

    number = input("Number: ")
    coords = np.array(np.random.randint(0, number, (number, 3)))

    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')
    ax.scatter(coords[:,0], coords[:,1], coords[:,2])
    plt.pause(0.1)

    cont = raw_input("Continue? (y/n)")
    if cont == 'n':
        s = False