Python如何实现3D绘图方式
这篇文章将为大家详细讲解有关Python如何实现3D绘图方式,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
Axes3D 对象创建方法一:Axes3D(fig)
在 Matplotlib 1.0.0 版本中,绘制 3D 图需要先导入 Axes3D 包,获取 figure 画布对象 fig 后,通过 Axes3D(fig) 方法来创建 Axes3D 对象,具体方法如下:
importnumpyasnpimportmatplotlib.pyplotaspltfrommpl_toolkits.mplot3dimportAxes3D#获取figure画布并创建Axes3D对象fig=plt.figure()ax=Axes3D(fig)#数据坐标z=np.linspace(0,15,1000)x=np.sin(z)y=np.cos(z)#绘制线性图ax.plot(x,y,z)plt.show()
Axes3D 对象创建方法二:add_subplot
在 Matplotlib 3.2.0 版本中,绘制 3D 图可以通过创建子图,然后指定 projection 参数 为 3d 即可,返回的 ax 为 Axes3D 对象,以下两种方法均可:
importnumpyasnpimportmatplotlib.pyplotasplt#获取figure画布并通过子图创建Axes3D对象fig=plt.figure()ax=fig.add_subplot(111,projection='3d')#数据坐标z=np.linspace(0,15,1000)x=np.sin(z)y=np.cos(z)#绘制线性图ax.plot(x,y,z)plt.show()
importnumpyasnpimportmatplotlib.pyplotasplt#通过子图创建Axes3D对象ax=plt.subplot(111,projection='3d')#数据坐标z=np.linspace(0,15,1000)x=np.sin(z)y=np.cos(z)#绘制线性图ax.plot(x,y,z)plt.show()
【01x03】Axes3D 对象创建方法三:gca
除了以上两种方法以外,还可以先获取画布对象 fig,再通过 fig.gca() 方法获取当前绘图区(gca = Get Current Axes),然后指定 projection 参数 为 3d 即可,返回的 ax 为 Axes3D 对象。
importnumpyasnpimportmatplotlib.pyplotasplt#依次获取画布和绘图区并创建Axes3D对象fig=plt.figure()ax=fig.gca(projection='3d')#数据坐标z=np.linspace(0,15,1000)x=np.sin(z)y=np.cos(z)#绘制线性图ax.plot(x,y,z)plt.show()
以上三种方法运行结果均为下图:
cmap 与 colorbar
默认情况下,散点图、线性图、曲面图等将以纯色着色,但可以通过提供 cmap 参数支持颜色映射。cmap 参数用于设置一些特殊的颜色组合,如渐变色等。
如果使用了 cmap 参数,则可以使用 pyplot.colorbar() 函数来绘制一个色条,即颜色对照条。
基本语法:matplotlib.pyplot.colorbar([mappable=None, cax=None, ax=None, **kw])
部分参数解释如下表,其他参数,如长度,宽度等请参考官方文档。
参数描述mappable要设置色条的图像对象,该参数对于 Figure.colorbar 方法是必需的,但对于 pyplot.colorbar 函数是可选的cax可选项,要绘制色条的轴ax可选项,设置色条的显示位置,通常在一个画布上有多个子图时使用**kw可选项,其他关键字参数,参考官方文档3D 线性图:Axes3D.plot
基本方法:Axes3D.plot(xs, ys[, zs, zdir='z', *args, **kwargs])
参数描述xs一维数组,点的 x 轴坐标ys一维数组,点的 y 轴坐标zs一维数组,可选项,点的 z 轴坐标zdir可选项,在 3D 轴上绘制 2D 数据时,数据必须以 xs,ys 的形式传递
,若此时将 zdir 设置为 ‘y’,数据将会被绘制到 x-z 轴平面上,默认为 ‘z’
**kwargs其他关键字参数,可选项,可参见 matplotlib.axes.Axes.plot
importnumpyasnpimportmatplotlib.pyplotasplt#设置中文显示plt.rcParams['font.sans-serif']=['MicrosoftYaHei']#依次获取画布和绘图区并创建Axes3D对象fig=plt.figure()ax=fig.gca(projection='3d')#第一条3D线性图数据theta=np.linspace(-4*np.pi,4*np.pi,100)z1=np.linspace(-2,2,100)r=z1**2+1x1=r*np.sin(theta)y1=r*np.cos(theta)#第二条3D线性图数据z2=np.linspace(-3,3,100)x2=np.sin(z2)y2=np.cos(z2)#绘制3D线性图ax.plot(x1,y1,z1,color='b',label='3D线性图一')ax.plot(x2,y2,z2,color='r',label='3D线性图二')#设置标题、轴标签、图例,也可以直接使用plt.title、plt.xlabel、plt.legend...ax.set_title('绘制3D线性图示例',pad=15,fontsize='12')ax.set_xlabel('x轴',color='r',fontsize='12')ax.set_ylabel('y轴',color='g',fontsize='12')ax.set_zlabel('z轴',color='b',fontsize='12')ax.legend()plt.show()
3D 散点图:Axes3D.scatter
基本方法:Axes3D.scatter(xs, ys[, zs=0, zdir='z', s=20, c=None, depthshade=True, *args, **kwargs])
参数描述xs一维数组,点的 x 轴坐标ys一维数组,点的 y 轴坐标zs一维数组,可选项,点的 z 轴坐标zdir可选项,在 3D 轴上绘制 2D 数据时,数据必须以 xs,ys 的形式传递
若此时将 zdir 设置为 ‘y’,数据将会被绘制到 x-z 轴平面上,默认为 ‘z’,
s标量或数组类型,可选项,标记的大小,默认 20c标记的颜色,可选项,可以是单个颜色或者一个颜色列表
支持英文颜色名称及其简写、十六进制颜色码等,更多颜色示例参见官网 Color Demo
depthshadebool 值,可选项,默认 True,是否为散点标记着色以提供深度外观**kwargs其他关键字参数,可选项,可参见 scatterimportnumpyasnpimportmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['MicrosoftYaHei']#依次获取画布和绘图区并创建Axes3D对象fig=plt.figure()ax=fig.gca(projection='3d')n=100defrandrange(n,vmin,vmax):return(vmax-vmin)*np.random.rand(n)+vmin'''定义绘制n个随机点,设置每一组数据点的样式和范围x轴数据位于[23,32]区间,y轴数据位于[0,100]区间,z轴数据位于[zlow,zhigh]区间'''form,zlow,zhighin[('o',-50,-25),('^',-30,-5)]:xs=randrange(n,23,32)ys=randrange(n,0,100)zs=randrange(n,zlow,zhigh)ax.scatter(xs,ys,zs,marker=m)#设置标题、轴标签、图例,也可以直接使用plt.title、plt.xlabel...ax.set_title('绘制3D散点图示例',pad=15,fontsize='12')ax.set_xlabel('x轴',color='b')ax.set_ylabel('y轴',color='b')ax.set_zlabel('z轴',color='b')plt.show()
3D 线框图:Axes3D.plot_wireframe
基本方法:Axes3D.plot_wireframe(X, Y, Z[, *args, **kwargs])
参数描述X二维数组,x 轴数据Y二维数组,y 轴数据Z二维数组,z 轴数据**kwargs其他关键字参数,可选项,如线条样式颜色等,可参见 Line3DCollectionimportnumpyasnpimportmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['MicrosoftYaHei']#获取figure画布并通过子图创建Axes3D对象fig=plt.figure()ax=fig.add_subplot(111,projection='3d')#定义Z轴坐标的生成方法deff(m,n):returnnp.sin(np.sqrt(m**2+n**2))#设置3D线框图数据x=np.linspace(-6,6,30)y=np.linspace(-6,6,30)#生成网格点坐标矩阵,该方法在系列文章八中有具体介绍X,Y=np.meshgrid(x,y)Z=f(X,Y)#绘制3D线框图ax.plot_wireframe(X,Y,Z,color='c')#设置标题、轴标签、图例,也可以直接使用plt.title、plt.xlabel...ax.set_title('绘制3D线框图示例',pad=15,fontsize='12')ax.set_xlabel('x轴')ax.set_ylabel('y轴')ax.set_zlabel('z轴')plt.show()
关于Python如何实现3D绘图方式就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。