写在前面:
import numpy as np
import matplotlib.pylab as mp
因此文章中的np就代表numpy库,mp就代表pylab绘图库
一、三维立体图像
- 导入类:from mpl_toolkits.mplot3d import axes3d
- 获得三维坐标轴:ax = mp.gca(projection=‘3d’)
1、三维线框
- 格式:ax.plot_wireframe(x, y, z, rstride=行距, cstrid=列距, linewidth=线宽, color=颜色)
- 测试代码:
import numpy as np
import matplotlib.pylab as mp
from mpl_toolkits.mplot3d import axes3d
n = 1000
# 栅格化:两组1000个-3到3的一维数组成x和y,会形成1000*1000个焦点的二维数组
x, y = np.meshgrid(np.linspace(-3, 3, n),
np.linspace(-3, 3, n))
# uniform:均匀分布,每个随机数概率一样在0.5和1.0之内产生n个随机数
y1 = (1 - x/n) * np.random.uniform(0.5, 1.0, n) # (1 - x/n)为了方便显示
y2 = (1 - x/n) * np.random.uniform(0.5, 1.0, n)
z = (1 - x/2 + x**5 + y**3) * \
np.exp(-x**2 - y**2)
# 换行做运算需要用\隔开,exp是底数为x指数是-x**2 - y**2
# 图像属性
mp.figure("3D Wireframe")
# 创建3D坐标轴
ax = mp.gca(projection='3d')
mp.title("3D Wireframe", fontsize=20) # 图像标题
# X、Y、Z坐标轴文本
ax.set_xlabel('X', fontsize=14)
ax.set_ylabel('Y', fontsize=14)
ax.set_zlabel('Z', fontsize=14)
mp.tick_params(labelsize=10) # 刻度标签大小
# 绘制三维线框图像
ax.plot_wireframe(x, y, z, rstride=30, cstride=30, linewidth=0.5, color='orangered')
mp.show()
- 测试效果