2011-04-18 86 views
4

我在這樣的方式進口matplotlib爲什麼matplotlib沒有屬性'pylab'?

import matplotlib as mpl 

一個錯誤說「模塊」對象有沒有屬性「pylab」扔出去當我運行下面的代碼:

x = np.arange(0,10,0.01) # import numpy as np 
y = np.sin(x) 
mpl.pylab.plot(x,y) 
mpl.pylab.show() 

當我以另一種方式導入matplotlib時沒有錯誤:

import matplotlib.pylab as pl 

有沒有人知道發生了什麼事?

回答

5

子模塊並不總是默認導入。你可以用

import matplotlib as mpl 
import matplotlib.pylab # Loads the pylab submodule as well 
# mpl.pylab is now defined 

這就是爲什麼做import matplotlib.pylab as pl解決了這個問題,爲您導入pylab

默認情況下不導入子模塊會帶來更快的加載時間。它也不會污染具有未使用子模塊名稱的主模塊名稱空間。模塊的創建者可以定義默認加載哪些子模塊(因爲pylab很重,它不會默認由matplotlib導入)。

-1

,如果你想導入的模塊沒有一個__init__.py文件通常你得到這個錯誤。我的安裝也出現這個錯誤。我認爲你必須接受,你必須從matplotlib單獨導入matplotlib.pylab。

+0

:也許你應該right.I習慣吧〜 – YOng 2011-04-18 05:19:46

+0

哪些子模塊默認情況下,進口的實際上是模塊創建者的完全控制之下。對於'pylab','matplotlib/__ init __。py'實際上可以包含一個簡單的'import pylab','matplotlib.pylab'可以通過'import matplotlib'獲得(不需要它有一個'__init __。py'文件)。 – EOL 2011-04-18 07:58:08

10

要繪製在非交互模式下,你應該使用模塊pyplot,不pylab

from matplotlib import pyplot 
import numpy 

pyplot.plot(range(1,100), numpy.sin(range(1,100))) 
pyplot.show() 

模塊pylab沒有通常用作matplotlib的子模塊,但作爲一個頂層模塊代替。通常,它以交互模式使用,將numpy,scipy和matplotlib的幾個部分組合到一個名稱空間中。

>>> from pylab import * 
>>> plot(range(1,100), sin(range(1,100))) 
>>> show() 
+0

我不在乎,但如何正確使用** pylab **或** pyplot **!但是你提到這對我來說是一個很好的建議。 – YOng 2011-04-18 05:26:06

+0

@ Chinmay:'從pyplot導入*'必須是pylab,我認爲 – joris 2011-04-18 07:44:34

+0

@joris:謝謝! – 2011-04-18 11:21:46

相關問題