python中Matplotlib实现绘制3D图的示例代码

发布时间 - 2026-01-11 03:05:59    点击率:

Matplotlib 也可以绘制 3D 图像,与二维图像不同的是,绘制三维图像主要通过 mplot3d 模块实现。但是,使用 Matplotlib 绘制三维图像实际上是在二维画布上展示,所以一般绘制三维图像时,同样需要载入 pyplot 模块。
mplot3d 模块下主要包含 4 个大类,分别是:

  • mpl_toolkits.mplot3d.axes3d()
  • mpl_toolkits.mplot3d.axis3d()
  • mpl_toolkits.mplot3d.art3d()
  • mpl_toolkits.mplot3d.proj3d()

其中,axes3d() 下面主要包含了各种实现绘图的类和方法。axis3d() 主要是包含了和坐标轴相关的类和方法。art3d() 包含了一些可将 2D 图像转换并用于 3D 绘制的类和方法。proj3d() 中包含一些零碎的类和方法,例如计算三维向量长度等。

一般情况下,我们用到最多的就是 mpl_toolkits.mplot3d.axes3d() 中的mpl_toolkits.mplot3d.axes3d.Axes3D() 类,而 Axes3D() 下面又存在绘制不同类型 3D 图的方法。你可以通过下面的方式导入 Axes3D()。

from mpl_toolkits.mplot3d.axes3d import Axes3D或from mpl_toolkits.mplot3d import Axes3D

三维散点图

首先,我们导入 numpy 随机生成一组数据。

import numpy as np

# x, y, z 均为 0 到 1 之间的 100 个随机数
x = np.random.normal(0, 1, 100)
y = np.random.normal(0, 1, 100)
z = np.random.normal(0, 1, 100)

接下来,开始绘图。第一步是载入 2D, 3D 绘图模块。

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

第二步,使用 Axes3D() 创建 3D 图形对象。

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

最后,调用散点图绘制方法绘图并显示出来。

ax.scatter(x, y, z)
plt.show()

三维线型图

线形图和散点图相似,需要传入 x, y, z 三个坐标的数值。详细的代码如下。

# 载入模块
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

# 生成数据
x = np.linspace(-6 * np.pi, 6 * np.pi, 1000)
y = np.sin(x)
z = np.cos(x)

# 创建 3D 图形对象
fig = plt.figure()
ax = Axes3D(fig)

# 绘制线型图
ax.plot(x, y, z)

# 显示图
plt.show()

三维柱状图

绘制完线型图,我们继续尝试绘制三维柱状图,其实它的绘制步骤和上面同样非常相似。

# 载入模块
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

# 创建 3D 图形对象
fig = plt.figure()
ax = Axes3D(fig)

# 生成数据并绘图
x = [0, 1, 2, 3, 4, 5, 6]
for i in x:
  y = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  z = abs(np.random.normal(1, 10, 10))
  ax.bar(y, z, i, zdir='y', color=['r', 'g', 'b', 'y'])
plt.show()

三维图曲面图

接下来需要绘制的三维曲面图要麻烦一些,我们需要对数据进行矩阵处理。其实和画二维等高线图很相似,只是多增加了一个维度。

# 载入模块
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 创建 3D 图形对象
fig = plt.figure()
ax = Axes3D(fig)

# 生成数据
X = np.arange(-2, 2, 0.1)
Y = np.arange(-2, 2, 0.1)
X, Y = np.meshgrid(X, Y)
Z = np.sqrt(X ** 2 + Y ** 2)

# 绘制曲面图,并使用 cmap 着色
ax.plot_surface(X, Y, Z, cmap=plt.cm.winter)

plt.show()

cmap=plt.cm.winter 表示采用了 winter 配色方案,也就是下图的渐变色。

混合图绘制

混合图就是将两种不同类型的图绘制在一张图里。绘制混合图一般有前提条件,那就是两种不同类型图的范围大致相同,否则将会出现严重的比例不协调,而使得混合图失去意义。

# -*- coding: utf-8 -*
# 载入模块
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt

# 创建 3D 图形对象
fig = plt.figure()
ax = Axes3D(fig)

# 生成数据并绘制图 1
x1 = np.linspace(-3 * np.pi, 3 * np.pi, 500)
y1 = np.sin(x1)
ax.plot(x1, y1, zs=0, c='red')

# 生成数据并绘制图 2
x2 = np.random.normal(0, 1, 100)
y2 = np.random.normal(0, 1, 100)
z2 = np.random.normal(0, 1, 100)
ax.scatter(x2, y2, z2)

# 显示图
plt.show()

子图绘制

# -*- coding: utf-8 -*
# 载入模块
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

# 创建 1 张画布
fig = plt.figure()

#===============

# 向画布添加子图 1 
ax1 = fig.add_subplot(1, 2, 1, projection='3d')

# 生成子图 1 数据
x = np.linspace(-6 * np.pi, 6 * np.pi, 1000)
y = np.sin(x)
z = np.cos(x)

# 绘制第 1 张图
ax1.plot(x, y, z)

#===============

# 向画布添加子图 2
ax2 = fig.add_subplot(1, 2, 2, projection='3d')

# 生成子图 2 数据
X = np.arange(-2, 2, 0.1)
Y = np.arange(-2, 2, 0.1)
X, Y = np.meshgrid(X, Y)
Z = np.sqrt(X ** 2 + Y ** 2)

# 绘制第 2 张图
ax2.plot_surface(X, Y, Z, cmap=plt.cm.winter)

# 显示图
plt.show()

我们可以来看一下这些代码。由于两张子图是绘制在 1 张画布上面的,所以这里需要提前创建 1 张画布。然后通过.add_subplot()添加子图,子图序号和二维绘图相似,只是注意 3D 绘图时要添加projection='3d'参数。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# python  # matplotlib  # 3d  # matplotlib绘制三维图  # Matplotlib绘3D图  # Python+Matplotlib绘制3D图像的示例详解  # Python利用matplotlib模块数据可视化绘制3D图  # python matlibplot绘制3D图形  # Python绘制3D图形  # python 绘制3D图案例分享  # 不同类型  # 两种  # 包含了  # 三维图像  # 的是  # 是在  # 随机数  # 你可以  # 柱状图  # 将会  # 最多  # 均为  # 我们可以  # 采用了  # 两张  # 可将  # 时要  # 第二步  # 大家多多  # 前提条件 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: JavaScript中如何操作剪贴板_ClipboardAPI怎么用  如何在阿里云购买域名并搭建网站?  Laravel如何自定义错误页面(404, 500)?(代码示例)  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  如何获取上海专业网站定制建站电话?  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  Laravel如何使用Blade组件和插槽?(Component代码示例)  BootStrap整体框架之基础布局组件  HTML 中动态设置元素 name 属性的正确语法详解  如何彻底删除建站之星生成的Banner?  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  重庆市网站制作公司,重庆招聘网站哪个好?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  如何在IIS中新建站点并解决端口绑定冲突?  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  如何快速登录WAP自助建站平台?  详解Android图表 MPAndroidChart折线图  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  Java垃圾回收器的方法和原理总结  JavaScript如何实现路由_前端路由原理是什么  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  大型企业网站制作流程,做网站需要注册公司吗?  ,交易猫的商品怎么发布到网站上去?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  简单实现jsp分页  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  linux写shell需要注意的问题(必看)  油猴 教程,油猴搜脚本为什么会网页无法显示?  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  如何在云主机快速搭建网站站点?  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  如何在Windows虚拟主机上快速搭建网站?