![3400ceb2dee215194fa2a0db01c6729c.png](https://i-blog.csdnimg.cn/blog_migrate/1a8d0f2081f93dd16b0048040298c703.jpeg)
![6491a9ce6025b36db71cc7f036eeeda8.png](https://i-blog.csdnimg.cn/blog_migrate/ff8e77c0d0250088227b3dac5abe5190.jpeg)
绘制三维图形
首先补充一下numpy中meshgrid函数的用法。具体含义如下图所示
![f0cf2c6796d7d3350813e6f0098391cd.png](https://i-blog.csdnimg.cn/blog_migrate/e92c0e5f33ce957dc0f7c43f0173cfc5.jpeg)
meshgrid函数的用法
绘制3D曲面图
from matplotlib import pyplot as pltimport numpy as npfrom mpl_toolkits.mplot3d import Axes3D #导入三维绘制工具箱fig = plt.figure() # 创建一个绘图对象ax = Axes3D(fig) # #用这个绘图对象创建一个Axes对象(有3D坐标)X = np.arange(-4, 4, 0.25) #创建从-4到4,步长为0.25的arange对象Y = np.arange(-4, 4, 0.25)X, Y = np.meshgrid(X, Y) #用这两个arange对象中的可能取值一一映射去扩充为所有可能的取样点R = np.sqrt(X**2 + Y**2) #函数表示Z = np.sin(R)# 具体函数方法可用 help(function) 查看,如:help(ax.plot_surface)# rstride和cstride表示行列隔多少个取样点建一个小面# cmap表示绘制曲面的颜色ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow')plt.show()
![f41cff130cdb5ca787e3fd4d77ec12d3.png](https://i-blog.csdnimg.cn/blog_migrate/9f38f7630049c6d7c0b322b6be7166c4.jpeg)
绘制三维散点图
import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Ddata = np.random.randint(0, 255, size=[40, 40, 40])#data = np.random.randint(0, 255, size=[3,40, 40, 40]) #四维x, y, z = data[0], data[1], data[2]#x, y, z = data[0,1], data[0,2], data[0,3] #取值时需要[0,index]ax = plt.subplot(111, projection='3d') # 创建一个三维的绘图工程# 将数据点分成三部分画,在颜色上有区分度ax.scatter(x[:10], y[:10], z[:10], c='y') # 绘制数据点ax.scatter(x[10:20], y[10:20], z[10:20], c='r')ax.scatter(x[30:40], y[30:40], z[30:40], c='g')ax.set_zlabel('Z') # 坐标轴ax.set_ylabel('Y')ax.set_xlabel('X')plt.show()
![b79cd401acdcc3eace5aadd9a656ae2c.png](https://i-blog.csdnimg.cn/blog_migrate/05cd9f789d16afea4bd3ac9f6ad9a903.jpeg)
参考
Numpy中Meshgrid函数介绍及2种应用场景(https://zhuanlan.zhihu.com/p/29663486)