1. 程式人生 > >理解matplotlib、pylab與pyplot之間的關係

理解matplotlib、pylab與pyplot之間的關係

先來說matplotlib與pylab

這些模組其實功能都相同,程式執行的時候都在執行相同的code,不同的是匯入模組的方式不同。

我們需要注意的是,matplotlib有兩個使用介面,一種是狀態機( state-machine )層的介面,通過pyplot模組來進行管理。另一種是面向物件的介面,這邊有個例子: How can I attach a pyplot function to a figure instance?

pylab將所有的功能函式(pyplot狀態機函式,大部分時numpy裡面的函式)全部匯入其單獨的名稱空間內。為什麼要這樣做,是因為這樣可以很好地與ipython(或者類似的IDE,比如pycharm)實現很好的互動模式,這個就和MATLAB差不多。

也就是說,看你想要做什麼,如果你不在一個gui的程式設計介面中(或者說不是一個可互動的後臺,沒有使用提供的後臺互動),你做的只是:

import matplotlib.pyplot as plt
import numpy as np

plt.plot(....)

這樣不會造成名稱空間的混亂,一般更建議這種做法。

ipython --pylab

from pylab import * 

效果一樣

現在通常這樣用:
ipython --matplotlib,這樣的話就可以不用一些匯入那麼多的功能函式,而是需要什麼加入什麼。

import numpy as np
import
matplotlib.pyplot as plt

同樣,如果你將matplotlib嵌入到gui中,但你不想匯入pyplot使系統執行額外的gui程式,則你需要做的是需要什麼就匯入什麼。

最後的建議

pylab和pyplot的區別是,前者將numpy匯入了其名稱空間中。這樣會使pylab表現的和matlab更加相似。現在來說我們經常使用pyplot,因為pyplot相比pylab更加純粹。