Matplotlib 讓資料視覺化-1

Sean Yeh
Python Everywhere -from Beginner to Advanced
8 min readApr 28, 2021

--

King Rama IX Royal Park,Bangkok, Thailand, photo by Sean Yeh

什麼是資料視覺化?

英語中有一句成語:

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)
imshow

客製化圖形顯示方式

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最基本的使用方式。下一篇我們將討論如何製作多個圖表的方式。

--

--

Sean Yeh
Python Everywhere -from Beginner to Advanced

# Taipei, Internet Digital Advertising,透過寫作讓我們回想過去、理解現在並思考未來。並樂於分享,這才是最大贏家。