You are on page 1of 12

Python 與 OpenCV 20210425

基本-6

-----------------------------------------------------------------------------------------------------------------------------------

(一) 目標:

1. 資料視覺化呈現(使用 Matplotlib)

(三) 資料視覺化呈現(使用 Matplotlib)

---------------------------------------------------------------------------------------------------------------------------------

資料視覺化之目的:

* 最後一步呈現你的成果之外,

* 在分析的過程中用資料視覺化來看出一些 insight,比方說用熱點圖來看 Deep learning 的 model 是對圖


片中哪一部分的看得較重要,

* 或是降維之後用資料視覺化去看資料在空間中的分佈,來決定下一步的分析要怎麼做。

一般來說我們在進行資料科學和機器學習分析的過程中我們會先使用資訊視覺化工具來了解整個資
料集的特色,並針對資料進行後續的處理和特徵選取,所以說資料視覺化不僅能呈現資料分析的結果,
對於資料分析的過程也十分重要。

Python 資料視覺化主要有三大套件:

Matplotlib (Matplot)

Seaborn

Plotly

其他還有像是 Bokeh、ggplot…十幾種 Python 視覺化套件,以及更進階的 BI Tool(Tableau, Spotfire,


MicroStrategy)。如果你去大公司上班,如台積電、Yahoo…都會購買這些要價不菲的 BI Tool,對於資料
處理&視覺化功能有更豐富的運用。但對於一般使用者只要先掌握上述三個就夠了。今天就要來介紹一
下這三種視覺化套件
Matplotlib(之後簡稱 Matplot)

matplotlib 官網

優點:

* 相較於其他視覺化套件,matplot 算是最歷史悠久,因此有很多的教學文章或是範例可參考。

* 很容易在上面外包一層以提供更好的預設值或是自己修改預設值。

* 畫圖功能最齊全,基本上沒什麼圖表畫不出來的

缺點:

* 圖表不好看(舊版的 matplot 很醜,但新版的 matplot 已好看,尤其在 style 功能出來之後可以提供自行


切換圖表的風格)

* 畫圖指令複雜

教學:

首先要使用 matplot 的話,跟 numpy 還有 pandas 一樣,需先載入 matplotlib.pyplot as plt。

1. 折線圖使用( plt.plot)

plt.plot(x, y, color='color', linestyle='linestyle', marker='marker', linewidth='linewidth')

* 常用是設定線條的顏色和樣式,其各個參數的意義與使用說明如下:
欲用來畫圖之水平和垂直軸的資料。
x, y
其參數型別可為 list, tuple, array, Series 等皆可。

color 也可以直接簡寫成 c,定義線條的顏色名稱。放在單引號中。

linestyle 也可以直接簡寫成 ls,定義線條的型式。放在單引號中。

marker 定義點的型式。放在單引號中。

linewidth 也可以直接簡寫成 lw,定義線條的寬度。放在單引號中。

(1) color:HTML 中支援的顏色名稱,如下表:

(2) linestyle
(3) marker

* 使用 plt.plot()方法來繪製圖形如下,其中參數可為 list, tuple, array, Series 等皆可:

* 加上標題--圖表 title 及座標軸 label:

plt.title("title") #圖表標題

plt.xlabel("xlabel") #圖表 x 軸標題

plt.ylabel("ylabel") #圖表 y 軸標題

* 控制座標軸的範圍--lim 和 axis:

plt.xlim(start, end) #控制 x 的範圍

plt.ylim(start, end) #控制 y 的範圍

plt.axis([xstart, xend, ystart, yend]) #一次設定 x 和 y 軸(軸的刻度)

plt.axis 除了可以設定 x 和 y 軸也可以設定其他樣式,ex:equal 可以讓 x 和 y 軸的單位一樣。

* 控制座標軸的刻度--ticks:

xticks(location, lables [,rotation])


yticks(location, lables [,rotation])

示範用日期來當 x 軸的座標

* 在圖表上放入圖例—legend 可區分出每個圖形與對應的數據名稱

plt.legend(loc=0)

plt.legend(loc='best')

--------------------------------------------------------------------------------------------------------------------------

一開始我們先只放一個參數,這樣只會有 y 的資料

此時,x 會是預設的 0,1,2,3…(N-1)。顯示出圖片需要加上.show() 否則只會顯示出這樣的訊息


[<matplotlib.lines.Line2D at 0x1100cfe48>]

#只放一個參數,這樣只會有 y 的資料
plt.plot([1, 2, 3, 4])
plt.show()

#放入參數—y +lw
plt.plot([1, 2, 3, 4], lw=3)
plt.show()
#放入參數—y +x
plt.plot([2,3,4,5],[1,4,6,9])
plt.show()

#放入參數—y +x+線顏色和點型式
plt.plot([2,3,4,5],[1,4,6,9],'ro')
plt.xlabel('x-label')
plt.ylabel('y-label')
plt.show()

#繪製不同型式顏色的曲線
[HW]先產出數值介於 0~5 的 array,並以 0.2 為間隔;分別畫出 y=x, y=x², y=x³ 的資料,格式定義如下:r
代表紅色、兩個-代表虛線;g 代表綠色、s 代表方塊;b 代表藍色,^代表三角形。
t=np.arange(0., 5., 0.2)
print("t= " + str(t))
t= [ 0. 0.2 0.4 0.6 0.8 1. 1.2 1.4 1.6 1.8 2. 2.2 2.4 2.6 2.8
3. 3.2 3.4 3.6 3.8 4. 4.2 4.4 4.6 4.8]
plt.plot(t, t, 'r--', t, t**2, 'gs', t, t**3, 'b^')
plt.show()
#在一個圖表內繪製多個圖型--繪製多個圖表並列做比較用途,可使用 subplot
x=np.arange(0.,5.,0.1)
y1=np.sin(2*np.pi*x)
y2=np.cos(2*np.pi*x)
plt.subplot(211)
plt.plot(x,y1,'b-.')
plt.subplot(212)
plt.plot(x,y2,'r--')
plt.show()

2. 長條圖使用( plt.bar)

bar(x, y, height, width, bottom, *, align='center', **kwargs) #(垂直長條圖)

barh(x, y, width, height, left, *, align='center', **kwargs) #(水平長條圖)

* 常用是設定線條的顏色和樣式,其各個參數的意義與使用說明如下:
欲用來畫圖之水平和垂直軸的資料。
x, y
其參數型別可為 list, tuple, array, Series 等皆可。

height, width (預設 0.8) 定義長條的高度(水平長條圖)或寬度(垂直長條圖)。

color 定義長條顏色

linewidth 定義長條邊框寬度。

edgecolor 定義長條邊框顏色

align 定義長條的對應位置,可選擇 center(default)與 edge 兩種。


edgecolor 定義長條邊框顏色

bottom, left 疊加 2 筆資料使用

#放入參數—y +x+垂直長條圖
x=[4, 4, 7, 7, 8, 9, 10, 10, 10, 11, 12, 12, 12, 12]
y=[1, 10, 4, 22, 16, 10, 18, 26, 34, 17, 2, 28, 14, 20]
plt.bar(x,y) #<Container object of 14 artists>
plt.show()

#放入參數—y +x+水平長條圖
x=[4, 4, 7, 7, 8, 9, 10, 10, 10, 11, 12, 12, 12, 12]
y=[1, 10, 4, 22, 16, 10, 18, 26, 34, 17, 2, 28, 14, 20]
plt.barh(x,y)
plt.show()

#放入參數—y +x+資料的堆疊關係
x=np.arange(5)
y1=np.random.randint(1, 20, 5)
y2=np.random.randint(1, 20, 5)
y3=np.random.randint(1, 20, 5)
plt.title("Stacked Bar Chart", fontsize=18, color='b')
plt.bar(x,y1,color='b',label="Data 1")
plt.bar(x,y2,color='g',label="Data 2", bottom=y1)
plt.bar(x,y2,color='r',label="Data 3", bottom=y1+y2)
plt.legend(loc=0)
plt.show()
3. 散布圖(plt.scatter)

plt.scatter(x,y)

* 常用是設定線條的顏色和樣式,其各個參數的意義與使用說明如下:
欲用來畫圖之水平和垂直軸的資料。
x, y
其參數型別可為 list, tuple, array, Series 等皆可。

height, width (預設 0.8) 定義長條的高度(水平長條圖)或寬度(垂直長條圖)。

color 定義長條顏色

linewidth 定義長條邊框寬度。

edgecolor 定義長條邊框顏色

align 定義長條的對應位置,可選擇 center(default)與 edge 兩種。

edgecolor 定義長條邊框顏色

bottom, left 疊加 2 筆資料使用

#放入參數—y +x
x=[4, 4, 7, 7, 8, 9, 10, 10, 10, 11, 12, 12, 12, 12]
y=[1, 10, 4, 22, 16, 10, 18, 26, 34, 17, 2, 28, 14, 20]
plt.scatter(x,y)
plt.show()
4. 圓餅圖(plt.pie)

plt.pie(data)

* 常用是設定線條的顏色和樣式,其各個參數的意義與使用說明如下:

欲用來畫圖之資料。
data
其參數型別可為 list, tuple, array, Series 等皆可。
height, width (預設 0.8) 定義長條的高度(水平長條圖)或寬度(垂直長條圖)。

color 定義長條顏色

linewidth 定義長條邊框寬度。

#放入參數—亂數,範圍 1~10 內的整數


data=np.random.randint(1, 11, 5) #5 組亂數,範圍 1~10 內的整數
x=np.arange(len(data))
plt.pie(data)
plt.show()

data=np.random.randint(1, 11, 4) #4 組亂數,範圍 1~10 內的整數


x=np.arange(len(data))
plt.pie(data)
plt.show()

5. 圖表優化

plt.style.use('圖表 style 名稱')

雖然預設的圖表不是那麼好看,但由於 matplot 還是有很多好看的範例,因此還是可以去網路上參考這


些範例,並透過一些參數的調整來讓你的圖表變好看。
此 matplotlib 還提供一個 style 的設定讓你可以直接透過改變 style 來讓圖形變好看。

使用 plt.style.available 列出可以用的 style 有哪些

#圖表型式 style--方格
plt.style.use('ggplot')
plt.scatter(x,y)
plt.show()

#圖表型式 style--泡泡圖
N=20
x=np.random.rand(N)
y=np.random.rand(N)
colors=np.random.rand(N)
area=np.pi*(15*np.random.rand(N))**2
plt.scatter(x, y, s=area, c=colors, alpha = 0.3)
plt.show()
plt.savefig("Plt-2.png", dpi=300, format="png") #直接將圖表存檔
更多的畫圖例子可參考:Matplot Gallery https://matplotlib.org/gallery/index.html

You might also like