python+matplotlib 繪制等高線
步驟有七:
- 有一個m*n維的矩陣(data),其元素的值代表高度
- 構造兩個向量:x(1*n)和y(1*m)。這兩個向量用來構造網格坐標矩陣(網格坐標矩陣m*n維,可見與data同)
- 構造網格坐標矩陣X,Y
- 進行顏色填充
- 畫等高線
- 等高線的描述
- 刪掉坐標系
1. 構造一下高度矩陣:
def f(x,y): """ 計算高度的函數 :param x: 向量 :param y: 向量 :return: dim(x)*dim(y)維的矩陣 """ # the height function return (1 - x / 2 + x**5 + y**3) * np.exp(-x**2 -y**2)
2. 構造兩個向量:
x = np.linspace(-5,5,256)
y = np.linspace(-5,5,256)
3. 構造網格坐標矩陣:
X,Y = np.meshgrid(x,y) # 獲得網格坐標矩陣
4. 進行顏色填充:
# 進行顏色填充 plt.contourf(X,Y,f(X,Y),8,cmap=plt.cm.hot)
5. 畫等高線:
# 進行等高線繪制 c = plt.contour(X,Y,f(X,Y),8,colors='black')
6. 等高線描述:
# 線條標注的繪制 plt.clabel(c,inline=True,fontsize=10)
7. 刪除兩條坐標:
plt.xticks(())
plt.yticks(())
-------------------------------------------------------------------------------------------------
將上面的代碼總結一下:
import numpy as np import matplotlib.pyplot as plt def f(x,y): """ 計算高度的函數 :param x: 向量 :param y: 向量 :return: dim(x)*dim(y)維的矩陣 """ # the height function return (1 - x / 2 + x**5 + y**3) * np.exp(-x**2 -y**2) x = np.linspace(-5,5,256) y = np.linspace(-5,5,256) X,Y = np.meshgrid(x,y) # 獲得網格坐標矩陣 # 進行顏色填充 plt.contourf(X,Y,f(X,Y),8,cmap=plt.cm.hot) # 進行等高線繪制 c = plt.contour(X,Y,f(X,Y),8,colors='black') # 線條標注的繪制 plt.clabel(c,inline=True,fontsize=10) plt.xticks(()) plt.yticks(()) plt.show()
運行結果: