等高線圖 Contour Chart
這篇教學會使用 matplotlib pyplot 模組裡的 contour() 方法,將資料繪製成等高線圖 ( Contour Chart ),並進一步介紹 contour() 的相關用法,以及使用 contourf() 將等高線圖變成等高線面積圖。
本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )
import matplotlib
要進行本篇的範例,必須先載入 matplotlib 函式庫的 pyplot 模組,範例將其獨立命名為 plt。
import matplotlib.pyplot as plt
pyplot.pie() 參數說明
pyplot.contour() 常用的參數如下表所示 ( 完整參數參考:matplotlib.pyplot.contour ):
參數 | 說明 |
---|---|
x | 必填,等高線圖的中心點 x 座標,使用串列格式。 |
y | 必填,等高線圖的中心點 y 座標,使用串列格式。 |
z | 必填,等高線圖的高度,使用串列格式。 |
levels | 等高線的數量。 |
colors | 等高線顏色,使用串列格式,若不足 levels 的數量,則會自動重複,不能和 map 同時使用。 |
cmap | 等高線顏色,使用 colormaps,不能和 colors 同時使用。( 參考:colormaps ) |
vmin, vmax | 等高線顏色的最小值與最大值。 |
linewidths | 等高線的粗細。 |
繪製第一張等高線圖
下方的程式碼,執行後會先使用 x 和 y 畫出一個二維的直角座標系統,接著 z 使用二維陣列,標記每個位置的高度,最後就會根據數據資料畫出等高線圖。
import matplotlib.pyplot as plt
x = range(5)
y = range(5)
z = [[0,0,0,0,0],
[0,1,0,0,0],
[0,0,2,0,0],
[0,0,0,0,0],
[0,0,0,0,0]]
plt.contour(x,y,z,levels=5)
plt.show()
繪製更精緻的等高線圖
參考 matplotlib 官方網站的運算式,搭配 numpy 的 linspace 方法,就能做出更細緻的等高線圖。
import matplotlib.pyplot as plt
import math
import numpy as np
x = np.linspace(-3, 3, 200) # 產生從 -3~3 共 200 的數值的 x
y = np.linspace(-3, 3, 200) # 產生從 -3~3 共 200 的數值的 y
z = [[(1 - x[i]/2 + x[i]*3 + y[j]*5) * math.exp(-x[i]**2 - y[j]**2) for i in range(200)] for j in range(200)]
# 根據 x 和 y 計算出 z
lv = np.linspace(np.min(z), np.max(z), 20) # 根據 z 的最大值和最小值,定義 level 區間
plt.figure(figsize=(8,6))
plt.contour(x,y,z,levels=lv)
plt.show()
使用 contourf() 繪製等高線面積圖
如果將 contour() 換成 contourf(),繪製的圖形就會變成「等高線面積圖」,下方的程式碼執行後,會畫出等高線面積圖和等高線結合的圖表。
import matplotlib.pyplot as plt
import math
import numpy as np
x = np.linspace(-2, 2, 200)
y = np.linspace(-2, 2, 200)
z = [[(1 - x[i]/2 + x[i]*3 + y[j]*5) * math.exp(-x[i]**2 - y[j]**2) for i in range(200)] for j in range(200)]
lv = np.linspace(np.min(z), np.max(z), 10)
plt.figure(figsize=(8,6))
plt.contourf(x,y,z,levels=lv,cmap='Reds') # 等高線面積圖
plt.contour(x,y,z,levels=lv,colors=['#000','#000']) # 等高線圖
plt.show()
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~