等高線圖如何繪製?只需掌握這3個函數就夠了!

Matplotlib提供了三個函數來繪製等高線圖可視化,用plt.contour畫等高線圖、用plt.contourf畫帶有填充色的等高線圖(filled contour plot)的色彩、用plt.imshow顯示圖形。下面用例子來展示一下,這三個函數的如何使用?

plt.contour畫等高線圖

1.首先定義一個函數z = f (x, y),用於演示一個等高線圖。

def f(x, y):
return np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)

2.用plt.contour函數來創建

它需要三個參數:x 軸、y 軸、z 軸三個座標 軸的網格數據。x 軸與 y 軸表示圖形中的位置,而z軸將通過等高線的等級來表示。

3.np.meshgrid函數

它可以把一維數組構建成二維網格數據,然後使用plt.contour()畫出一個標準的高線圖。

x = np.linspace(0, 5, 50)
y = np.linspace(0, 5, 40)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
plt.contour(X, Y, Z, colors='black')
等高線圖如何繪製?只需掌握這3個函數就夠了!

注意點!當圖形中只使用一種顏色時,默認使用虛線表示負數,使用實線表示正數。另外,你可以用 cmap 參數設置一個線條配色方案來自定義顏色。

4.使用RdGy配色;

這種(紅 - 灰,Red-Gray的縮寫)配色方案,用於觀察數據的密集度,數據越集中顯示效果越好。

plt.contour(X, Y, Z, 20, cmap='RdGy')
等高線圖如何繪製?只需掌握這3個函數就夠了!

plt.contourf畫帶有填充色的等高線圖

加了顏色這幅圖看起來好看多了,但是線條之間的間隙還是有點大 。我們可以通過 plt.contourf()函數來填充等高線圖,它的語法和plt.contour()是一樣的。

另外還可以通過plt.colorbar()命令,自動創建一個表示圖形各種顏色對應標籤信息的顏色條。

plt.contourf(X, Y, Z, 20, cmap='RdGy')
plt.colorbar()
等高線圖如何繪製?只需掌握這3個函數就夠了!

plt.imshow顯示圖形

通過顏色條可以清晰地看出,黑色區域是“波峰”(peak),紅色區域是“波谷”(valley)。但是圖形還有一點不盡如人意的地方,就是看起來有點兒“汙漬斑斑”,不是那麼幹淨。

如何解決這個問題?

可以通過plt.imshow()函數來處理,它可以將二維數組渲染成漸變圖。

plt.imshow(Z, extent=[0, 5, 0, 5], origin='lower',cmap='RdGy')
plt.colorbar()
plt.axis(aspect='image')
等高線圖如何繪製?只需掌握這3個函數就夠了!

使用imshow()函數時一些注意事項:

  1. plt.imshow()不支持用x軸和y軸數據設置網格,而是必須通過extent參數設置圖形的座標範圍[xmin, xmax, ymin, ymax]。
  2. plt.imshow()默認使用標準的圖形數組定義,就是原點位於左上角(瀏覽器都是如此), 而不是絕大多數等高線圖中使用的左下角。這一點在顯示網格數據圖形的時候必須調整。
  3. plt.imshow()會自動調整座標軸的精度以適應數據顯示。你可以通過 plt.axis(aspect='image') 來設置 x 軸與 y 軸的單位。

等高線圖與彩色圖組合

例如,如果我們想一幅背景色半透明的彩色圖(可以通過 alpha 參數設置透明度),與另一幅座標軸相同、帶數據標籤的等高線圖疊放在一起(用 plt.clabel()函數實現)。

contours = plt.contour(X, Y, Z, 3, colors='black')
plt.clabel(contours, inline=True, fontsize=8)
plt.imshow(Z, extent=[0, 5, 0, 5], origin='lower',cmap='RdGy', alpha=0.5)
plt.colorbar()
等高線圖如何繪製?只需掌握這3個函數就夠了!

將plt.contour、plt.contourf與plt.imshow這三個函數組合起來之後,就能畫出更加清晰好看的等高線圖。


分享到:


相關文章: