怎么在python中绘制一个3维正态分布图

本篇文章为大家展示了怎么在python中绘制一个3维正态分布图,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

使用的python工具包为:

frommatplotlibimportpyplotasplt
importnumpyasnp
frommpl_toolkits.mplot3dimportAxes3D

在贴代码之前,有必要从整体上了解这些图是如何画出来的。可以把上面每一个3D图片理解成一个长方体。输入数据是三维的,x轴y轴和z轴。在第三个图片里面有x、y和z坐标的标识。在第三张图片中,我们可以理解为,z是随着x和y变化的函数。就像一个人在山丘地区走动一样,其中x和y表示的是方向,z表示的这个人在上坡还是下坡。第二张图片的中间那个,其实是一个3维的正态分布图。

具体的公式为:

怎么在python中绘制一个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维正态分布图,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注恰卡编程网行业资讯频道。

发布于 2021-03-26 01:49:20
收藏
分享
海报
0 条评论
158
上一篇:如何在微信小程序中使用日历组件 下一篇:Statement和Preparement怎么在JDBC中使用
目录

    推荐阅读

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码