python画三维立体图完整代码_使用python绘制3维正态分布图的方法

今天使用python画了几个好玩的3D展示图,现在分享给大家。

先贴上图片

使用的python工具包为:

from matplotlib import pyplot as plt

import numpy as np

from mpl_toolkits.mplot3d import Axes3D

在贴代码之前,有必要从整体上了解这些图是如何画出来的。可以把上面每一个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值的变化而变化的函数。

下面贴一下代码

这是第二张图片的代码。

from matplotlib import pyplot as plt

import numpy as np

from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()

ax = Axes3D(fig)

len = 8;

step = 0.4;

def build_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);

def build_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()

这是第三张图片的代码

import numpy as np

import matplotlib.pyplot as plt

import mpl_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维正态分布图的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Python绘制三维正态分布的可视化是一个常见的任务。在Python中,我们通常使用`matplotlib`和`numpy`库来完成这个任务。 首先,让我们创建一个二正态分布的可视化。假设我们有两个变量x和y,并且我们的数据来自一个均值为0,标准差为1的正态分布。 ```python import numpy as np import matplotlib.pyplot as plt # 创建数据 np.random.seed(0) # 为了结果可复现 x = np.random.normal(loc=0, scale=1, size=500) y = np.random.normal(loc=0, scale=1, size=500) # 创建散点 plt.scatter(x, y) plt.title('2D Normal Distribution') plt.xlabel('X') plt.ylabel('Y') plt.show() ``` 接下来,让我们创建一个三维正态分布的可视化。假设我们有三个变量x, y和z,并且我们的数据来自一个均值为(0, 0, 0),标准差为(1, 1, 1)的正态分布。 ```python import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 创建数据 np.random.seed(0) # 为了结果可复现 x = np.random.normal(loc=(0, 0, 0), scale=(1, 1, 1), size=500) y = np.random.normal(loc=(0, 0, 0), scale=(1, 1, 1), size=500) z = np.random.normal(loc=(0, 0, 0), scale=(1, 1, 1), size=500) fig = plt.figure() # 创建新像窗口 ax = fig.add_subplot(111, projection='3d') # 使用3D绘模式 ax.scatter(x, y, z) # 在3D中创建散点 ax.set_title('3D Normal Distribution') ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') plt.show() ``` 以上代码将生成二三维正态分布的可视化。这些可以帮助我们理解正态分布的性质,以及如何使用这些分布来生成数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值