怎么在python中绘制一个3维正态分布图
本篇文章为大家展示了怎么在python中绘制一个3维正态分布图,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
使用的python工具包为:
frommatplotlibimportpyplotasplt importnumpyasnp frommpl_toolkits.mplot3dimportAxes3D
在贴代码之前,有必要从整体上了解这些图是如何画出来的。可以把上面每一个3D图片理解成一个长方体。输入数据是三维的,x轴y轴和z轴。在第三个图片里面有x、y和z坐标的标识。在第三张图片中,我们可以理解为,z是随着x和y变化的函数。就像一个人在山丘地区走动一样,其中x和y表示的是方向,z表示的这个人在上坡还是下坡。第二张图片的中间那个,其实是一个3维的正态分布图。
具体的公式为:
上面的是2维的,即只有x和y,如果是三维的话,需要一点变形,只需要在上面的公式基础之上把exp()里面改变为:exp(-((x-u)^2 + (y - u)^2)/(2q^2)), 这里的u表示平均值,q表示标准差。这样变化之后,z = f(x, y)。这就是z值的公式了,表示的是z值随着x和y值的变化而变化的函数。
下面贴一下代码
这是第二张图片的代码。
frommatplotlibimportpyplotasplt importnumpyasnp frommpl_toolkits.mplot3dimportAxes3D fig=plt.figure() ax=Axes3D(fig) len=8; step=0.4; defbuild_layer(z_value): x=np.arange(-len,len,step); y=np.arange(-len,len,step); z1=np.full(x.size,z_value/2) z2=np.full(x.size,z_value/2) z1,z2=np.meshgrid(z1,z2) z=z1+z2; x,y=np.meshgrid(x,y) return(x,y,z); defbuild_gaussian_layer(mean,standard_deviation): x=np.arange(-len,len,step); y=np.arange(-len,len,step); x,y=np.meshgrid(x,y); z=np.exp(-((y-mean)**2+(x-mean)**2)/(2*(standard_deviation**2))) z=z/(np.sqrt(2*np.pi)*standard_deviation); return(x,y,z); #具体函数方法可用help(function)查看,如:help(ax.plot_surface) x1,y1,z1=build_layer(0.2); ax.plot_surface(x1,y1,z1,rstride=1,cstride=1,color='green') x5,y5,z5=build_layer(0.15); ax.plot_surface(x5,y5,z5,rstride=1,cstride=1,color='pink') #x2,y2,z2=build_layer(-0.26); #ax.plot_surface(x2,y2,z2,rstride=1,cstride=1,color='yellow') # #x6,y6,z6=build_layer(-0.22); #ax.plot_surface(x6,y6,z6,rstride=1,cstride=1,color='pink') #x4,y4,z4=build_layer(0); #ax.plot_surface(x4,y4,z4,rstride=1,cstride=1,color='purple') x3,y3,z3=build_gaussian_layer(0,1) ax.plot_surface(x3,y3,z3,rstride=1,cstride=1,cmap='rainbow') plt.show() 这是第三张图片的代码 importnumpyasnp importmatplotlib.pyplotasplt importmpl_toolkits.mplot3d x,y=np.mgrid[-1:1:20j,-1:1:20j] z=x*np.exp(-x**2-y**2) ax=plt.subplot(111,projection='3d') ax.plot_surface(x,y,z,rstride=2,cstride=1,cmap=plt.cm.coolwarm,alpha=0.8) ax.set_xlabel('x') ax.set_ylabel('y') ax.set_zlabel('z') plt.show()
上述内容就是怎么在python中绘制一个3维正态分布图,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注恰卡编程网行业资讯频道。
推荐阅读
-
Python中怎么动态声明变量赋值
这篇文章将为大家详细讲解有关Python中怎么动态声明变量赋值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文...
-
python中变量的存储原理是什么
-
Python中怎么引用传递变量赋值
这篇文章将为大家详细讲解有关Python中怎么引用传递变量赋值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文...
-
python中怎么获取程序执行文件路径
python中怎么获取程序执行文件路径,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的...
-
Python中如何获取文件系统的使用率
Python中如何获取文件系统的使用率,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴...
-
Python中怎么获取文件的创建和修改时间
这篇文章将为大家详细讲解有关Python中怎么获取文件的创建和修改时间,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读...
-
python中怎么获取依赖包
今天就跟大家聊聊有关python中怎么获取依赖包,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据...
-
python怎么实现批量文件加密功能
-
python中怎么实现threading线程同步
小编给大家分享一下python中怎么实现threading线程同步,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!...
-
python下thread模块创建线程的方法
本篇内容介绍了“python下thread模块创建线程的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来...