10大免费软件下载网站推荐,规模以上工业企业个数,空中客车网站建设需求,安徽省交通运输厅网站原标题#xff1a;30行Python代码实现3D数据可视化作者#xff1a;潮汐来源#xff1a;Python技术欢迎来到 编程教室~我们之前的文章中有讲解过不少 Matplotlib 的用法#xff0c;比如#xff1a;之前我们基本都是用它来绘制二维的数据图表。而今天文章中#xff0c;我们…原标题30行Python代码实现3D数据可视化作者潮汐来源Python技术欢迎来到 编程教室~我们之前的文章中有讲解过不少 Matplotlib 的用法比如之前我们基本都是用它来绘制二维的数据图表。而今天文章中我们将教大家如何用不到 30 行代码绘制 Matplotlib 3D 图形。回顾 2D 作图用赛贝尔曲线作 2d 图。此图是用基于 Matplotlib 的 Path 通过赛贝尔曲线实现的有对赛贝尔曲线感兴趣的朋友们可以深入了解一下。在 matplotlib 中figure 为画布axes 为绘图区fig.add_subplot、plt.subplot 方法均可以创建子图。以下是作图实践。importmatplotlib.path asmpathimportmatplotlib.patches asmpatchesimportmatplotlib.pyplot aspltfig, ax plt.subplots#定义绘图指令与控制点坐标Path mpath.Path# Path 控制坐标点绘制贝塞尔曲线# 图形数据构造# MOVETO表示将绘制起点移动到指定坐标# CURVE4表示使用4个控制点绘制3次贝塞尔曲线# CURVE3表示使用3个控制点绘制2次贝塞尔曲线# LINETO表示从当前位置绘制直线到指定位置# CLOSEPOLY表示从当前位置绘制直线到指定位置并闭合多边形path_data [(Path.MOVETO, ( 1.88, -2.57)),(Path.CURVE4, ( 0.35, -1.1)),(Path.CURVE4, ( -1.75, 1.5)),(Path.CURVE4, ( 0.375, 2.0)),(Path.LINETO, ( 0.85, 1.15)),(Path.CURVE4, ( 2.2, 3.2)),(Path.CURVE4, ( 3, 0.05)),(Path.CURVE4, ( 2.0, -1.5)),(Path.CLOSEPOLY, ( 1.58, -2.57)),]codes,verts zip(*path_data)path mpath.Path(verts, codes)patch mpatches.PathPatch(path, facecolor r, alpha 0.5)ax.add_patch(patch)# plot control points and connecting linesx, y zip(*path.vertices)line, ax.plot(x, y, go-)ax.gridax.axis( equal)plt.show心型效果图 3D 帽子图1Matplotlib 绘制 3D 图形使用的是 mplot3d Toolkit即 mplot3d 工具包。绘制 3D 图可以通过创建子图然后指定 projection 参数 为 3d 即可返回的 ax 为 Axes3D 对象。导入包frommatplotlib importcmfrommatplotlib.ticker importLinearLocator, FormatStrFormatterfrommpl_toolkits.mplot3d importAxes3D绘图全过程importmatplotlib.pyplot aspltfrommatplotlib importcmfrommatplotlib.ticker importLinearLocator, FormatStrFormatterfrommpl_toolkits.mplot3d importAxes3Dimportnumpy asnpfig plt.figure# 指定图形类型是 3d 类型ax fig.add_subplot(projection 3d)# 构造数据X np.arange( -5, 5, 0.25)Y np.arange( -5, 5, 0.25)X, Y np.meshgrid(X, Y)R np.sqrt(X** 2 Y** 2)Z np.sin(R)# Plot the surface.surf ax.plot_surface(X, Y, Z, cmapcm.coolwarm,linewidth 0, antialiased False)# Customize the z axis.ax.set_zlim( -1.01, 1.01)ax.zaxis.set_major_locator(LinearLocator( 10))ax.zaxis.set_major_formatter(FormatStrFormatter( %.02f))# Add a color bar which maps values to colors.fig.colorbar(surf, shrink 0.5, aspect 5)plt.show呈现效果帽子图1 3D 帽子图2 importnumpy asnpimportmatplotlib.pyplot aspltfrommpl_toolkits.mplot3d importAxes3Dfig plt.figure# 指定图形类型为 3d 类型ax fig.add_subplot( 111, projection 3d)# X, Y valueX np.arange( -5, 5, 0.25)Y np.arange( -5, 5, 0.25)# 设置 x-y 平面的网格X, Y np.meshgrid(X, Y)R np.sqrt(X ** 2 Y ** 2)# height valueZ np.sin(R)# rstride:行之间的跨度 cstride:列之间的跨度# rcount:设置间隔个数默认50个ccount:列的间隔个数 不能与上面两个参数同时出现#vmax和vmin 颜色的最大值和最小值ax.plot_surface(X, Y, Z, rstride 1, cstride 1, cmapplt.get_cmap( rainbow))# zdir : z | x | y 表示把等高线图投射到哪个面# offset : 表示等高线图投射到指定页面的某个刻度ax.contourf(X,Y,Z,zdir z,offset -2)# 设置图像z轴的显示范围x、y轴设置方式相同ax.set_zlim( -2, 2)plt.show帽子图2 3D 线性图3D 线性图使用 Axes3D.plot来绘制。绘画的基本方法Axes3D.plot(xs, ys[, zs, zdirz, *args, **kwargs])参数说明参数描述xs一维数组点的 x 轴坐标ys一维数组点的 y 轴坐标zs一维数组可选项点的 z 轴坐标zdir可选项在 3D 轴上绘制 2D 数据时数据必须以 xsys 的形式传递若此时将 zdir 设置为 ‘y’数据将会被绘制到 x-z 轴平面上默认为 ‘z’**kwargs其他关键字参数可选项可参见 matplotlib.axes.Axes.plotimportnumpyasnpimportmatplotlib.pyplot aspltfrommpl_toolkits.mplot3d importAxes3D# 依次获取画布和绘图区并创建 Axes3D 对象fig plt.figureax 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 Line1)ax.plot(x2, y2, z2, color r, label 3D Line2)# 设置标题、轴标签、图例也可以直接使用 plt.title、plt.xlabel、plt.legend...ax.set_title( 3D Line View, pad 15, fontsize 10)ax.set_xlabel( x , color r, fontsize 14)ax.set_ylabel( y , color g, fontsize 14)ax.set_zlabel( z , color b, fontsize 14)ax.legendplt.show结果显示线性图 3D 散点图绘制 3D 散点图的基本方法是Axes3D.scatter(xs, ys[, zs0, zdirz, s20, cNone, depthshadeTrue, *args, **kwargs])参数详解参数描述xs一维数组点的 x 轴坐标ys一维数组点的 y 轴坐标zs一维数组可选项点的 z 轴坐标zdir可选项在 3D 轴上绘制 2D 数据时数据必须以 xsys 的形式传递若此时将 zdir 设置为 ‘y’数据将会被绘制到 x-z 轴平面上默认为 ‘z’s标量或数组类型可选项标记的大小默认 20c标记的颜色可选项可以是单个颜色或者一个颜色列表支持英文颜色名称及其简写、十六进制颜色码等更多颜色示例参见官网 Color Demodepthshadebool 值可选项默认 True是否为散点标记着色以提供深度外观**kwargs其他关键字importmatplotlib.pyplotaspltimportnumpy asnpfrommpl_toolkits.mplot3d importAxes3Ddefrandrange(n, vmin, vmax):return(vmax - vmin) * np.random.rand(n) vminfig plt.figureax fig.add_subplot( 111, projection 3d)n 100# For each set of style and range settings, plot n random points in the box# defined by x in [23, 32], y in [0, 100], z in [zlow, zhigh].forc, m, zlow, zhigh in[( r, o, -50, -25), ( b, ^, -30, -5)]:xs randrange(n, 23, 32)ys randrange(n, 0, 100)zs randrange(n, zlow, zhigh)ax.scatter(xs, ys, zs, cc, markerm)ax.set_title( 3D Diagram View, pad 15, fontsize 10)ax.set_xlabel( x , color r, fontsize 14)ax.set_ylabel( y , color g, fontsize 14)ax.set_zlabel( z , color b, fontsize 14)plt.show结果显示为散点图 总结本文主要是介绍使用 Python 第三方库 Matplotlib 来绘制 3D 图形当然除了上面演示的这几种还有更多丰富的图形和功能等待你去挖掘。相比于 2D 图形3D 图形可以多展现一个维度的数据特征在可视化时会有更加直观的效果。 在实际的数据可视化过程中我们要根据具体需求来决定用怎样的形式来展现而多了解一些工具就可以更加游刃有余。这些强大的工具也正是 Python 在数据分析和可视化方面的一大优势之一。本文相关代码下载地址https://github.com/JustDoPython/python-examples/tree/master/chaoxi/Matplotlib_3D150年前他对拿破仑做数据可视化 返回搜狐查看更多责任编辑