等高線圖是在地理課中講述山峰山谷時繪制的圖形,在機器學習中也會被用在繪制梯度下降算法的圖形中。
因為等高線的圖有三個信息:x,y以及x,y所對應的高度值。
這個高度值的計算我們用一個函數來表述:
計算x,y坐標對應的高度值def f(x, y): return (1-x/2+x**5+y**3) * np.exp(-x**2-y**2)
這個函數看起來挺復雜的,但我們這里只是為了能夠獲得一個高度值,因此其中函數代表什么意義不用關心,只要知道輸入一個x,y,輸出一個高度值就可以了。
要畫出等高線,核心函數是plt.contourf(),但在這個函數中輸入的參數是x,y對應的網格數據以及此網格對應的高度值,因此還需要調用np.meshgrid(x,y)把x,y值轉換成網格數據才行,這樣完整的代碼如下:
畫等高線的代碼如下:
import numpy as npimport pandas as pdimport matplotlib.pyplot as plt# 計算x,y坐標對應的高度值def f(x, y): return (1-x/2+x**5+y**3) * np.exp(-x**2-y**2)# 生成x,y的數據n = 256x = np.linspace(-3, 3, n)y = np.linspace(-3, 3, n)# 把x,y數據生成mesh網格狀的數據,因為等高線的顯示是在網格的基礎上添加上高度值X, Y = np.meshgrid(x, y)# 填充等高線plt.contourf(X, Y, f(X, Y))# 顯示圖表plt.show()
上述代碼顯示的圖形為:

這顏色有點太冷了,我們想顯示熱力圖,那只要在plt.contourf()函數中添加屬性cmap=plt.cm.hot就能顯示熱力圖,其中cmap代表為color map,我們把color map映射成hot(熱力圖),此處關鍵代碼為:
# 填充等高線plt.contourf(X, Y, f(X, Y), cmap=plt.cm.hot)
顯示的圖為:

是否顯示得挺熱的。:)
上面是用plt.contourf()填充了等高線,但還有一種方式是可以直接顯示等高線,而不是填充的方式,例如:
C = plt.contour(X, Y, f(X, Y), 20)
這里20代表的是顯示等高線的密集程度,數值越大,畫的等高線數就越多。
這樣顯示的圖形為:

當然,如果我們不調用前面的plt.contourf()函數,則就會直接顯示等高線。
最后我們想在等高線中添加上標注值:
plt.clabel(C, inline=True, fontsize=12)
顯示的圖為:
新聞熱點
疑難解答