1. 程式人生 > >Python 繪圖包 Matplotlib Pyplot 教程

Python 繪圖包 Matplotlib Pyplot 教程

ble htm easy gree align nes value 參數調用 imp

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]。

plt.plot
([1, 2, 3, 4], [1, 4, 9, 16])

設置圖的樣式

對於每一對 X,Y 參數,第三個參數都是可選的,它是指示繪圖的顏色和線條類型的格式字符串。格式字符串的字母和符號來自 MATLAB,可以將一個顏色字符串與一個行樣式字符串連接起來。默認的格式字符串是"b-",這是一個純藍色的線。例如:要用紅色源泉回值上面的圖,代碼如下:

plt.plot
([1, 2, 3, 4], [1, 4, 9, 16], ‘ro‘)

plt.axis
([0, 6, 0, 20])

plt.show
()

有關行樣式和格式化字符串的完整列表,參見?plot() 文檔。上面示例中的?axis()

?命令接受一個 [ xmin,xmax,ymin,ymax ] 列表,並指定軸的視口。

所有序列都在內部轉換成 numpy 數組。下面是示例:

import
											numpy
													as
															np
																

?

# evenly sampled time at 200ms intervals
										

t =
												np.arange(0., 5., 0.2)

?

# red dashes, blue squares and green triangles
										

plt.plot
(t, t, ‘r--‘, t, t**2, ‘bs‘, t, t**3, ‘g^‘)

plt.show
()

使用關鍵詞字符串繪圖

在某些情況下,數據的格式允許使用字符串訪問特定的變量。例如:使用 numpy.recarray

pandas.DataFrame

Matplotlib?允許使用 data 關鍵字參數提供這樣的對象。如果提供了,那麽可以生成包含與這些變量對應字符串的繪圖。

data = {‘a‘: np.arange(50),


										‘c‘: np.random.randint(0, 50, 50),


										‘d‘: np.random.randn(50)}

data[‘b‘] = data[‘a‘] +
																		10
																				*
																						np.random.randn(50)

data[‘d‘] = np.abs(data[‘d‘]) *
																				100
																					

?

plt.scatter
(‘a‘, ‘b‘, c=‘c‘, s=‘d‘, data=data)

plt.xlabel
(‘entry a‘)

plt.ylabel
(‘entry b‘)

plt.show
()

用分類變量繪圖

還可以使用分類變量創建繪圖。Matplotlib 允許直接將分類變量傳遞給許多繪圖函數。例如:

names = [‘group_a‘, ‘group_b‘, ‘group_c‘]

values = [1, 10, 100]

?

plt.figure
(1, figsize=(9, 3))

?

plt.subplot
(131)

plt.bar
(names, values)

plt.subplot
(132)

plt.scatter
(names, values)

plt.subplot
(133)

plt.plot
(names, values)

plt.suptitle
(‘Categorical Plotting‘)

plt.show
()

控制線屬性

線有許多可以設置的屬性: 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() 函數:

In [69]: lines =
													plt.plot([1, 2, 3])

?

In [70]: plt.setp(lines)

  alpha: float

  animated: [True | False]

  antialiased or aa: [True | False]

  ...snip

?

生成多個圖和軸

MATLAB 和 pyplot,具有當前圖形和當前 Axes(軸對象)。所有繪圖命令都應用於當前 Axes。函數 gca() 返回當前 Axes(?matplotlib.axes.Axes 實例),gca() 返回當前圖形(matplotlib.figure.Figure 實例)。下面是創建兩個圖的代碼:

def
											f(t):


										return
												np.exp(-t) *
																np.cos(2*np.pi*t)

?

t1 =
												np.arange(0.0, 5.0, 0.1)

t2 =
												np.arange(0.0, 5.0, 0.02)

?

plt.figure
(1)

plt.subplot
(211)

plt.plot
(t1, f(t1), ‘bo‘, t2, f(t2), ‘k‘)

?

plt.subplot
(212)

plt.plot
(t2, np.cos(2*np.pi*t2), ‘r--‘)

plt.show
()

?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

import
											matplotlib.pyplot
													as
															plt
																

plt.figure
(1)                # the first figure
													

plt.subplot
(211)             # the first subplot in the first figure
													

plt.plot
([1, 2, 3])

plt.subplot
(212)             # the second subplot in the first figure
													

plt.plot
([4, 5, 6])

?

?

plt.figure
(2)                # a second figure
													

plt.plot
([4, 5, 6])          # creates a subplot(111) by default
																	

?

plt.figure
(1)                # figure 1 current; subplot(212) still current
													

plt.subplot
(211)             # make subplot(211) in figure1 current
													

plt.title
(‘Easy as 1, 2, 3‘) # subplot 211 title

可以使用?clf()?清楚當前軸。這是一個面向對象 API 的有狀態包裝器,可以參見?Artist 教程。

如果制作大量圖形,那麽需要需要註意的:一個圖形所需的內存在使用 close() 顯示關閉之前是不被完全釋放的。刪除對圖形的所有引用,[並 、或] 關閉窗口是不夠的。因為 pyplot 內部引用指到 close() 結束?

?

?

Python 繪圖包 Matplotlib Pyplot 教程