Python 繪圖包 Matplotlib Pyplot 教程
Pyplot 接口簡介
Pyplot 入門
matplotlib.pyplot?是命令風格函數的集合,使 Matplotlib 像 MATLAB 一樣工作。每個 Pyplot 函數對圖形做一些修改,例如:創建一個圖形,在圖形中創建一個繪圖區域,在繪圖區域中回值一些線條,用標簽裝飾圖形等等。
在?matplotlib.pyplot中,在函數調用之間保留了各種狀態,以便跟蹤當前圖形和繪圖區域等內容,繪圖函數指向當前 軸(Axes 對象)。
註意 Pyplot API 通常不如面向對象的 API 靈活。在這裏看到的大多數函數調用也可以作為 Axes 對象的方法調用。建議瀏覽教程和實力來了解這是如何工作的。 |
?
用 Pyplot 生成可視化效果非常快速:
import matplotlib.pyplot as plt plt.plot([1, 2, 3, 4]) plt.ylabel(‘some numbers‘) plt.show() |
可能知道為什麽 X軸的範圍是 0-3,Y 軸的範圍是 1-4。如果向 plot() 命令提供單個列表或數組,Matplotlib 將假定是一個 Y 值序列,並自動生成 X 值。因為 Python 範圍以 0 開頭,所以默認的 X 向量與 Y 的長度相同,但是以 0 開頭。因此 X 數據是[0, 1, 2, 3]。
|
設置圖的樣式
對於每一對 X,Y 參數,第三個參數都是可選的,它是指示繪圖的顏色和線條類型的格式字符串。格式字符串的字母和符號來自 MATLAB,可以將一個顏色字符串與一個行樣式字符串連接起來。默認的格式字符串是"b-",這是一個純藍色的線。例如:要用紅色源泉回值上面的圖,代碼如下:
|
有關行樣式和格式化字符串的完整列表,參見?plot() 文檔。上面示例中的?axis()
所有序列都在內部轉換成 numpy 數組。下面是示例:
?
?
|
使用關鍵詞字符串繪圖
在某些情況下,數據的格式允許使用字符串訪問特定的變量。例如:使用 numpy.recarray 或
pandas.DataFrame。
Matplotlib?允許使用 data 關鍵字參數提供這樣的對象。如果提供了,那麽可以生成包含與這些變量對應字符串的繪圖。
?
|
用分類變量繪圖
還可以使用分類變量創建繪圖。Matplotlib 允許直接將分類變量傳遞給許多繪圖函數。例如:
?
?
|
控制線屬性
線有許多可以設置的屬性: linewidth、 dash style、 antialiased 等;?請參見matplotlib.lines.Line2D。有幾種方法可以設置 line 屬性:
- 使用關鍵字方向圖:
plt.plot
(x, y, linewidth=2.0)
- 使用 Line2D 實力的 setter 方法。Plot 返回一個 Line2D 對象列表,例如:line1,?line2?=?plot(x1,?y1,?x2,?y2)。在下面的代碼中,假設只有一行,所以返回的列表長度為 1。使用元組拆分行,以獲得該列表的第一個元素:
line, = plt.plot(x, y, ‘-‘)
line.set_antialiased(False) # turn off antialising
- 使用?setp()?命令。下面的示例使用 MATLAB-style 的命令來設置行列表的多個屬性。顯而易見 setp 可以處理對象表單或單個對象。可以使用 Python 關鍵字參數或 MATLAB-style 的字符串或鍵值對。
lines = plt.plot(x1, y1, x2, y2)
# use keyword args
plt.setp(lines, color=‘r‘, linewidth=2.0)
# or MATLAB style string value pairs
plt.setp(lines, ‘color‘, ‘r‘, ‘linewidth‘, 2.0)
詳細的 Line2D?屬性。
若要獲取可設置行屬性的列表,請使用一行或多行作為參數調用 setp() 函數:
?
|
?
生成多個圖和軸
MATLAB 和 pyplot,具有當前圖形和當前 Axes(軸對象)。所有繪圖命令都應用於當前 Axes。函數 gca() 返回當前 Axes(?matplotlib.axes.Axes 實例),gca() 返回當前圖形(matplotlib.figure.Figure 實例)。下面是創建兩個圖的代碼:
?
?
?
|
?figure()?命令是可選的,因為圖1是默認創建的,就像如果不手動指定任何坐標軸,默認情況下會創建一個子圖2 一樣。subplot()?命令 numrows,numcols,plot_number,其中plot_number 範圍從1到numrows * numcols。如果numrows * numcols < 10,那麽 subplot 命令逗號是可選的。所以subplot(211)和subplot(2, 1, 1)是一樣的。
可以創建任何數量的子圖和軸。如果想動手設置一個坐標軸,可以使用?axes() 命令,該命令允許將位置指定為 axes([左,底,寬,高]),其中所有值都是小數(0-1)坐標。有關手動設置軸的示例,請參見?Axes Demo;有關許多子圖示例,請參見 Basic Subplot Demo。
? ?
?
|
可以使用?clf()?清楚當前軸。這是一個面向對象 API 的有狀態包裝器,可以參見?Artist 教程。
如果制作大量圖形,那麽需要需要註意的:一個圖形所需的內存在使用 close() 顯示關閉之前是不被完全釋放的。刪除對圖形的所有引用,[並 、或] 關閉窗口是不夠的。因為 pyplot 內部引用指到 close() 結束?。
?
?
Python 繪圖包 Matplotlib Pyplot 教程