文章目錄
- 前言
- 1. 網格點
- 2. 等高線
- 3. 三維影像
前言
??本篇文章記錄一下函式的等高線及其三維影像的可視化方法,本例繪制的函式為 f ( x , y ) = x e ? ( x 2 + y 2 ) f(x,y)=x e^{-(x^2+y^2)} f(x,y)=xe?(x2+y2)
1. 網格點
??在繪制曲線之前,先了解一下網格點的繪制,比如繪制一個3x3的網格,那么就需要9個坐標點:
(0,2)-----(1,2)-----(2,2)
(0,1)-----(1,1)-----(2,1)
(0,0)-----(1,0)-----(2,0)
??將其x軸和y軸坐標分開表示:
# x軸:
[[0, 1, 2],
[0, 1, 2],
[0, 1, 2]]
# y軸:
[[0, 0, 0],
[1, 1, 1],
[2, 2, 2]]
??在numpy中可以使用np.meshgrid()來生成網格點:
import numpy as np
import matplotlib.pyplot as plt
# 10x10
x = np.linspace(-1.5, 1.5, num=10)
y = np.linspace(-1.5, 1.5, num=10)
# generate grid
X, Y = np.meshgrid(x, y)
plt.plot(X, Y, marker='.', linestyle='')
plt.grid(True)
plt.show()

2. 等高線
??繪制等高線需要的資料有點的坐標位置(x, y)以及坐標的高度z,高度z就是將坐標點(x, y)帶入函式
f
(
x
,
y
)
f(x, y)
f(x,y)中計算得到的,在matplotlib中可以使用plt.contour()來繪制:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-1.5, 1.5, num=100)
y = np.linspace(-1.5, 1.5, num=100)
X, Y = np.meshgrid(x, y)
f = X * np.exp(-X**2 - Y**2)
fig = plt.figure()
plt.xlim(-1.5, 1.5)
plt.ylim(-1.5, 1.5)
# draw
ax = plt.contour(X, Y, f, levels=10, cmap=plt.cm.cool)
# add label
plt.clabel(ax, inline=True)
# plt.savefig('img1.png')
plt.show()

# add color
plt.contourf(X, Y, f, levels=10, cmap=plt.cm.cool)
# plt.colorbar()
# plt.savefig('img1.png')
plt.show()

??更多的
api引數請參考官方檔案,
3. 三維影像
??函式的三維影像的繪制需要的資料與等高線一樣,即坐標位置(x, y)以及坐標的高度z,在matplotlib中可以使用mpl_toolkits.mplot3d來繪制:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
x = np.linspace(-1.5, 1.5, num=100)
y = np.linspace(-1.5, 1.5, num=100)
X, Y = np.meshgrid(x, y)
f = X * np.exp(-X**2 - Y**2)
fig = plt.figure()
ax = Axes3D(fig)
plt.xlim(-1.5, 1.5)
plt.ylim(-1.5, 1.5)
ax.plot_surface(X, Y, f, cmap=plt.cm.cool)
# plt.savefig('img1.png')
plt.show()




??有關
mpl_toolkits.mplot3d的使用可以參考官方檔案;
??更多的顏色搭配可參考
matplotlib的colormap官方手冊,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/416151.html
標籤:AI
