2017-06-19 133 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