Python绘制3维正态分布图:从基础到实战

林舟
林舟
发布时间:2026-10-11| 1人浏览过
原创

本文详细介绍如何使用Python的Matplotlib和NumPy库绘制3维正态分布图。通过构建网格数据、定义高斯函数以及利用plot_surface函数,您可以直观地展示二维正态分布的三维形态。文章包含完整的代码示例和参数说明,适合数据可视化初学者和进阶用户参考。

3维正态分布图绘制原理

在Python中绘制3维正态分布图,核心在于生成符合二维正态分布规律的网格数据。正态分布(高斯分布)的概率密度函数在三维空间中呈现钟形曲面。其数学表达式为:

z = exp(-((x-u)^2 + (y-u)^2) / (2*q^2))

其中,u 代表均值(通常设为0),q 代表标准差,x 和 y 是自变量坐标。通过计算每个网格点上的 z 值,即可构建出三维曲面。

基础实现:分层绘制与高斯函数

为了实现更复杂的3维分布效果,我们可以将正态分布分解为多个层级进行绘制。以下代码展示了如何定义网格、构建基础层以及高斯分布层,并使用 plot_surface 进行渲染。

1. 导入必要的库

from matplotlib import pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

2. 定义网格与高斯函数

首先,我们需要创建 x 和 y 的网格数据,并定义一个计算高斯分布 z 值的函数。代码中使用了 np.arange 生成坐标轴,np.meshgrid 生成网格,最后通过指数函数计算 z 值。

fig = plt.figure()
ax = Axes3D(fig)

# 定义网格范围与步长
length = 8
step = 0.4

def build_layer(z_value):
    """构建基础层(示例)"""
    x = np.arange(-length, length, step)
    y = np.arange(-length, length, 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(-length, length, step)
    y = np.arange(-length, length, 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)

3. 绘制曲面

使用 ax.plot_surface 将生成的网格数据绘制为3维曲面。通过调整 rstride(行步长)、cstride(列步长)以及 cmap(颜色映射),可以优化视觉效果。

# 绘制基础层示例
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')

# 绘制高斯分布层
x3, y3, z3 = build_gaussian_layer(0, 1)
ax.plot_surface(x3, y3, z3, rstride=1, cstride=1, cmap='rainbow')

plt.show()

进阶实现:简洁的高斯曲面绘制

如果您希望绘制一个更简洁、标准的3维高斯分布曲面,可以使用 np.mgrid 生成网格,并直接定义函数 z = x * exp(-x^2 - y^2)。这种方法代码更紧凑,适合快速验证。

import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d

# 生成网格数据
x, y = np.mgrid[-1:1:20j, -1:1:20j]
# 定义z值
z = x * np.exp(-x ** 2 - y ** 2)

# 创建3D子图
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()

关键参数说明

  • rstride 和 cstride:控制曲面的行和列步长。值越小,曲面越平滑,但计算量越大。
  • cmap:颜色映射表,如 'rainbow' 或 'coolwarm',用于区分不同高度的颜色。
  • alpha:透明度,取值范围0到1,用于调整曲面的透明程度。

总结

通过Python的Matplotlib和NumPy库,我们可以轻松绘制出3维正态分布图。掌握网格生成、高斯函数定义以及曲面绘制参数,能够帮助您更直观地展示数据分布特征。以上就是使用Python绘制3维正态分布图的详细内容,更多关于Python数据可视化的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。