Matplotlib 讓資料視覺化-1
什麼是資料視覺化?
英語中有一句成語:
a picture is worth a thousand words.
意思是說,有時候比起透過詳細的解釋,若藉由一張圖片來表達,更能有效的描述有關主題的複雜概念。
我們常常看到一堆數字與文字組合的報表,有時候很難一下子就理解裡面的內容。若借助圖形來妥善表達其中的意義,可說是「一張圖勝過千言萬語」。這種處理資訊的方式我們稱之為「視覺化」,透過視覺化可以幫助我們更容易理解資訊。
資料視覺化工具:Matplotlib
在Python的世界中,處理資料視覺化的工具很多,其中Matplotlib可以說是一切的基礎。Matplotlib是個Python套件,在Python繪圖領域中被廣泛使用。使用者可以輕鬆地透過Matplotlib套件將數據圖形化,並且輸出各種格式。使用者甚至可以客製化為自己想要的表現方式。今天我們要簡單介紹如何透過這個套件來對資料進行視覺化的工作。
Matplotlib起手式
我們可以透過Matplotlib建立各種圖形,圖形中最基礎的是折線圖。如果要透過Matplotlib製做折線圖的話,基本步驟大致上會像下面的程式碼一樣,看起來不難吧?
import matplotlib.pyplot as pltplt.plot(x,y)plt.show()
接下來,我們就逐步解釋Matplotlib的使用方式。
匯入套件
使用Matplotlib的方式很多,使用的第一步,就是匯入Matplotlib套件。在這裡我們會使用Matplotlib套件中的子模組pyplot。如果你透過Anaconda安裝環境的話,Matplotlib套件已經安裝完畢了,可以直接匯入使用。下面我們將Matplotlib套件的pyplot子模組匯入,並且給它一個別名plt,以便於日後方便呼叫。
import matplotlib.pyplot as plt
提供資料
Matplotlib主要可以繪製X、Y座標的資料,假設我們有兩組資料 y 與 x:
y = [17.4,17.2,17.5,17.8,17.8]x = [14.40,14.30,14.20,14.10,14.00]
上面的資料,X座標的串列與Y座標的串列,其元素必須相同,否則會出現錯誤。
繪製圖形:折線圖(plot chart)
Matplotlib使用plot方法可以繪製出折線圖。折線圖是將個資料點用一條線連起來而成的圖。折線圖適合用來呈現連續性的資料,我們常見的依照時間推進的趨勢圖,大多會使用這種表現方式。
先前我們已經產生了兩個座標串列,我們把它們的X座標串列與Y座標串列傳入plot方法。通常傳入的XY資料為一維陣列。
plot方法會產生一個圖形的物件。這個物件的內容尚未顯示在畫面中。
plt.plot(y,x)
顯示結果
最後,再使用show顯示繪製後物件的結果。
plt.show()
以上就是Matplotlib的基本使用方式。接下來我們要來看除了以上這些外,Matplotlib還可以幫助我們做哪些事?
Matplotlib繪製其他圖形
除了前面示範的折線圖之外,我們還可以使用Matplotlib來產生其他的圖形。以下示範各種圖形的使用方式
折線圖
基本語法如下:
plot([x],Y)
前面我們就是使用plt.plot(x,y)
的方式繪製圖形。
散佈圖(scatter chart)
這種圖形主要是用來將兩種變數分別作為座標X與Y軸,其中自變數
(independent variable)列於X軸,應變數(dependent variable)則列於Y軸。例如,某校同學身高與體重間的關係、某期間匯率對黃金價格的關係。由散布圖可以看出兩者之間的關聯性(正相關、負相關或無相關)。
使用Matplotlib繪製散佈圖的基本語法如下:
scatter(X,Y,...)
我們使用plt.scatter(x,y)
的方式可以將上面的XY資料繪製成散佈圖。
柱狀圖(bar chart)
柱狀圖又稱長條圖,可以用來呈現多筆離散的資料,資料與資料之間彼此不相關,也沒有一定的順序關係。繪製柱狀圖的方式基本上與前面的折線圖類似,透過bar的方式可以繪製柱狀圖。語法如下:
plt.bar(x,y)
例如:我們透過下面的x、y資料,可以繪製出柱狀圖。
x = ['A', 'B', 'C', 'D']
y = [50, 67, 10, 41]plt.bar(x,y)
圓餅圖(pie chart)
圓餅圖與柱狀圖類似,差別在於圓餅圖利用百分比呈現個資料的比例。pie方法可以繪製圓餅圖,其語法為:
plt.pie(資料串列 [, 選擇性參數])
下面是只有一組資料串列的圓餅圖。
temp = [17.4,17.2,17.5,17.8,17.8]
plt.pie(temp)
2D色圖
這是一個2D陣列的有色圖。假設我們有下面的資料 Z(使用numpy建立的隨機數,形狀為8 X 8的矩形)。
Z = np.random.uniform(0,1,(8,8))
使用imshow可以產生下面的圖:
plt.imshow(Z)
客製化圖形顯示方式
Matplotlib讓我們可以對圖表做一些設定,如圖表的標題、X及Y座標標題等。下面我們就來看一些基本常用的設定方式。
marker屬性
我們可以在plot裡面添加marker屬性,來標示資料。例如下面的程式碼,我們添加了一個marker=”v”
的屬性:
plt.plot(x, y, marker="v")
資料為:
x = ['A', 'B', 'C', 'D']
y = [50, 67, 10, 41]
結果在現行圖上面多出下面四個點:
linestyle屬性
承上,我們也可以再增加一個linestyle屬性來客製化線圖的型態。在這裡我們加上linestyle=” — “ 。
plt.plot(x,y,marker="v",linestyle="--")
原來的實線,就改變為下面的虛線。
color屬性
加上這個屬性,可以改變線圖的顏色。下面的程式碼中,r
代表紅色,會顯示紅色的線條。
plt.plot(x,y,linestyle="--",color='r')
label屬性
可以分別對X軸及Y軸座標設定標題。
plt.xlabel("X座標標題")plt.ylabel("Y座標標題")
下面的程式碼中,我們分別設定了x軸與y軸的label。
plt.plot(x,y,linestyle="--",color='r')
plt.xlabel("Group")
plt.ylabel("Score")
title屬性
也可以設定整個圖表的標題。
plt.title("圖表標題")
下面,我們添加了plt.title(“Chart for the Game”)
。
plt.plot(x,y,linestyle="--",color='r')
plt.xlabel("Group")
plt.ylabel("Score")
plt.title("Chart for the Game")
結果在圖表的上方顯示出標題。
注意:您可能會發現我們在例子中都沒有使用中文字。這是因為若要讓matplotlib支援中文的話,需要另外進行「字體」的設定。為了方便,就不另外設定字體。
其他參數設定
在plot裡面,除了上面的x、y基本參數外,還可以放入其他的參數。
以上是matplotlib最基本的使用方式。下一篇我們將討論如何製作多個圖表的方式。