用python 畫圖 -- matplotlib 簡單畫等高線圖 -- (二)
除了一些的 line plot 之外,在數據繪圖的時候也常常遇到要 plot 一些三維數據。而我最常遇到的需求是將一組三維的數據用等高線圖 ( contour )的形式畫出來。 matplotlib 提供了非常好用的 function 來滿足這項需求。 而目前我知道用來畫 contour 的 function 有下面這幾個: contour() contourf() tricontour() tricontourf() contour() 和 contourf() 因為要求輸入的數據形式必須為格狀 (Grid),所以使用上較不直覺。而tricontour() 和 tricontourf() 則只需要將手上的數據分為 x list、y list、z list 餵進去就行。 準備數據 因為手邊沒有現成的數據,所以只好假設一個情境來讓練習有點代入感。 先假設一個房間寬 5 公尺、長 12 公尺。準備一台掃地功能壞掉而且會亂跑的掃地機器人,這台機器人雖然無法掃地但是可以量測地板的骯髒程度,並用 0 ~ 10 的數值表示(0 為最乾淨,10為最髒)。放著讓這台機器人在房間裡跑一個晚上,並在隔天從機器人裡取出數據。而我們預計機器人會給出這個房間的骯髒程度分佈圖。 根據這個情境做假數據,假如機器人一個晚上進行了 100 次的隨機位置量測,所以產生假數據的程式碼可以簡單地這樣寫: import numpy as np x_list = [] y_list = [] z_list = [] for i in range(100): x_list.append(np.random.random() * 5) y_list.append(np.random.random() * 12) z_list.append(np.random.random() * 10) 從機器人裡面取得了 x_list,y_list,z_list 分別代表依照時間順序量到的 x 和 y 位置與對應的地板骯髒程度 z。 Plot 而使用 matplotlib 畫出等高線的程式碼: import matplotlib.pyplot as plt plt.tricontour(x_list, y_list, z_list) 所以整個程式碼其實很簡單: 而 tricontourf() 這個