長條圖 Bar Chart
這篇教學會使用 matplotlib pyplot 模組裡的 bar() 和 barh() 方法,將資料繪製成長條圖 ( Bar Chart ),並進一步介紹 polt 的相關用法 ( bar() 繪製垂直長條圖,barh() 繪製水平長條圖 )。
本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )
import matplotlib
要進行本篇的範例,必須先載入 matplotlib 函式庫的 pyplot 模組,範例將其獨立命名為 plt。
import matplotlib.pyplot as plt
pyplot.bar() 參數說明
pyplot.bar() 常用的參數如下表所示 ( 完整參數參考:matplotlib.pyplot.bar、matplotlib.pyplot.barh ):
參數 | 說明 |
---|---|
x | 必填,數據位置 ( x 軸 )。 |
height | 必填,長條圖高度 ( y 軸 )。 |
width | 寬度,預設 0.8,支援陣列資料。 |
bottom | 底部位置,預設 0,支援陣列資料。 |
align | 對齊方式,預設 center,可設定 edge。 |
color | 顏色,支援陣列資料 ( 除了十六進位色碼,也可填入顏色代碼,例如 r、g、b、m、c、y...等,參考:color 列表 )。 |
edgecolor | 邊框顏色,支援陣列資料 ( 除了十六進位色碼,也可填入顏色代碼,例如 r、g、b、m、c、y...等,參考:color 列表 )。 |
linewidth | 邊框寬度,預設 2,支援陣列資料。 |
tick_label | 座標軸文字,預設無文字,支援陣列資料。 |
xerr, yerr | x、y 軸的誤差範圍,預設 0,支援陣列資料。 |
ecolor | 誤差線段顏色,預設黑色,支援陣列資料。 |
capsize | 誤差範圍的上下線條尺寸,預設 0。 |
fill | 是否填滿,預設 True。 |
繪製第一張長條圖
下方的程式碼,會畫出一張垂直的的長條圖。
import matplotlib.pyplot as plt
x = [1,2,3,4,5] # 水平資料點
h = [10,20,30,40,50] # 高度
plt.bar(x,h)
plt.show()
如果將上方的程式碼,加入一些參數的設定,就能讓長條圖看起來更多變化。
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
h = [10,20,30,40,50]
color = ['r','b','g','y','m'] # 顏色數據
label = ['a','b','c','d','e'] # 標籤數據
plt.bar(x,h,color=color,tick_label=label,width=0.5) # 加入顏色、標籤和寬度參數
plt.show()
將 bar() 改為 barh(),就會變成水平的長條圖 ( 注意如果改成水平長條圖,參數 width 要改成 height )。
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
h = [10,20,30,40,50]
color = ['r','b','g','y','m']
label = ['a','b','c','d','e']
plt.barh(x,h,color=color,tick_label=label,height=0.5) # 改成 barh
plt.show()
兩組數據的長條圖
如果有兩組數據需要同時呈現,可以調整長條圖的對齊位置,並計算兩組數據之間的位置,就能實現同時出現的長條圖 ( 如果要顯示更多組數據,則需透過繪製座標軸的方式處理 )。
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
x2 = [0.8,1.8,2.8,3.8,4.8] # 因為長條圖寬度 0.4,所以位移距離為除以 2 為 0.2
h = [10,20,30,40,50] # 第一組數據高度
h2 = [20,10,40,50,30] # 第二組數據高度
plt.bar(x,h,color='b',width=0.4, align='edge') # 第一組數據靠左邊緣對齊
plt.bar(x2,h2,color='r',width=0.4) # 第二組數據置中對齊
plt.show()
將 bar() 改為 barh(),就會變成水平的長條圖 ( 注意如果改成水平長條圖,參數 width 要改成 height )。
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
x2 = [0.8,1.8,2.8,3.8,4.8]
h = [10,20,30,40,50]
h2 = [20,10,40,50,30]
plt.barh(x,h,color='b',height=0.4, align='edge') # 改成 barh
plt.barh(x2,h2,color='r',height=0.4) # 改成 barh
plt.show()
搭配 NumPy 繪製長條圖
由於 matplotlib 能完美的和 NumPy 整合,所以能透過 NumPy 強大的處理或產生數據能力,快速產生許多繪圖用的數據,下方的例子,使用 NumPy 產生 100~1000 隨機五個數字,使用 matplotlib 繪製出結果。
from numpy import random
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
h = random.randint(100,1000,5)
plt.bar(x,h)
plt.show()
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~