2017-06-19 78 views
4

当我在家中的电脑上试用此功能时,它可以正常工作,但不能在我的电脑上工作。下面的代码Matplotlib动画未显示

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.animation as animation 
import sys 
import multiprocessing 


def update_line(num, gen, line): 
    data = gen.vals_queue.get() 
    data = np.array(data) 
    line.set_data(data[..., :num]) 
    return line, 


class Generator(multiprocessing.Process): 
    def __init__(self): 
     self.vals = [[], []] 
     super(Generator, self).__init__() 
     self.vals_queue = multiprocessing.Queue() 

    def run(self): 
     while True: 
      self.vals[0].append(np.random.rand()) 
      self.vals[1].append(np.random.rand()) 
      self.vals_queue.put(self.vals) 


if __name__ == '__main__': 
    gen = Generator() 
    gen.start() 
    fig1 = plt.figure() 
    l, = plt.plot([], [], 'r-') 
    plt.xlim(0, 1) 
    plt.ylim(0, 1) 
    plt.xlabel('x') 
    plt.title('test') 
    print 11111111111111 
    sys.stdout.flush() 
    line_ani = animation.FuncAnimation(fig1, update_line, frames=None, fargs=(gen, l), 
             interval=50, blit=True, repeat=False) 
    print 222222222222222222222222 
    sys.stdout.flush() 
    plt.show() 
    print 3333333333333333333333333 
    sys.stdout.flush() 

而且我看到的输出是

11111111111111 
222222222222222222222222 
3333333333333333333333333 

,应用程序不会退出,只是挂在那里,但没有数字弹出。我从Linux终端运行它。我matplotlib的版本是matplotlib-2.0.0-1.x86_64

另外,我在工作中得到这个(问题之一)

CentOS Linux release 7.2.1511 (Core) 
echo $SHELL 
/bin/bash 
echo $BASH_VERSION 
4.2.46(1)-release 
Python 2.7.12 
+1

我认为我们将需要更多的信息,即:OS两台计算机的,在boths Python版本,并可能使用的shell运行Python文件(例如,IPython都不会公开另一个窗口显示数字) –

+0

请参阅上面的编辑。我没有从iPython运行它,只是从Linux终端运行。 –

回答

5

这是真的很难重现这个问题,所以我我会尝试给出一些一般性建议并尝试猜测问题的实际根源。

首先,如果您不使用它们,使用virtualenvs是最符合您的利益的。您的项目中将有一个requirements.txt文件,并将您的家用计算机(工作的计算机)的要求冻结为requirements.txt,然后在工作时在计算机上创建一个新的virtualenv,最后安装要求。这样你就可以确定你在两台计算机上都有相同版本的所有软件包。

之后,你应该尝试看看它是否工作。如果它不请,请尝试以下内容并提供更多详细信息:

  1. 当您在工作的计算机上运行时,是否看到任何错误或警告?
  2. 你可以使用matplotlib做非常基本的地块吗?像这样的:

    import matplotlib.pyplot as plt plt.plot([1, 2, 3, 4]) plt.ylabel('some numbers') plt.show()

  3. 如果从2的例子不工作,尝试用plt.savefig('numbers.png')更换plt.show(),看看图保存成功。如果是这样的话,那么你在matplotlib的交互性方面有一些问题。如果你看不到一个名为numbers.png的文件,那么通常可能是matplotlib的安装有问题,而不仅仅是动画部分。或者,也可以安装一些matplotlib依赖的包,比如Tkinter。

而不是进入更多的假设情景,我会停下来等待更多的细节。

p.s.链接如果有问题,显示在窗口中产生的曲线/动画可能对您有用:

How can I set the 'backend' in matplotlib in Python?

http://matplotlib.org/faq/usage_faq.html#what-is-a-backend

0

看来,库暴露了一些变化,或者安装不正确。简单地更新,如下库,

为Ubuntu/Debian的OS打开终端和类型:

    sudo apt-get install python-matplotlib 

对于窗户打开命令行和类型:

    python -m pip install -U pip setuptools 
        python -m pip install matplotlib 

查看是否可行。

来源:https://matplotlib.org/users/installing.html