如何用Matplotlib 画三维图的示例代码


Posted in Python onJuly 28, 2020

用Matplotlib画三维图

最基本的三维图是由(x, y, z)三维坐标点构成的线图与散点图,可以用ax.plot3D和ax.scatter3D函数来创建,默认情况下,散点会自动改变透明度,以在平面上呈现出立体感

三维的线图和散点图

#绘制三角螺旋线
from mpl_toolkits import mplot3d
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np

ax = plt.axes(projection='3d')

#三维线的数据
zline = np.linspace(0, 15, 1000)
xline = np.sin(zline)
yline = np.cos(zline)
ax.plot3D(xline, yline, zline, 'gray')

# 三维散点的数据
zdata = 15 * np.random.random(100)
xdata = np.sin(zdata) + 0.1 * np.random.randn(100)
ydata = np.cos(zdata) + 0.1 * np.random.randn(100)
ax.scatter3D(xdata, ydata, zdata, c=zdata, cmap='Greens')

如何用Matplotlib 画三维图的示例代码

三维等高线图

def f(x, y):
 return np.sin(np.sqrt(x ** 2 + y ** 2))
x = np.linspace(-6,6,30)
y = np.linspace(-6,6,30)
X, Y = np.meshgrid(x, y)
Z = f(X,Y)

fig = plt.figure()
ax = plt.axes(projection='3d')
ax.contour3D(X, Y, Z, 50, cmap='binary')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
#调整观察角度和方位角。这里将俯仰角设为60度,把方位角调整为35度
ax.view_init(60, 35)

如何用Matplotlib 画三维图的示例代码

线框图和全面图

全面图和线框图相似,只不过线框图的每一个面都是由多边形构成。只要增加唉一个配色方案来填充这些多边形,就可以感受到可视化图形表面的拓扑结构了。

#线框图
fig =plt.figure()
ax = plt.axes(projection='3d')
ax.plot_wireframe(X, Y, Z, color='c')
ax.set_title('wireframe')

如何用Matplotlib 画三维图的示例代码

#曲面图
ax = plt.axes(projection='3d')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='viridis', edgecolor='none')
ax.set_title('surface')

如何用Matplotlib 画三维图的示例代码

#使用极坐标可以获得切片的效果
r = np.linspace(0, 6, 20)
theta = np.linspace(-0.9 * np.pi, 0.8 * np.pi, 40)
r, theta = np.meshgrid(r, theta)
X = r * np.sin(theta)
Y = r * np.cos(theta)
Z = f(X, Y)
ax = plt.axes(projection='3d')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='viridis', edgecolor='none')

如何用Matplotlib 画三维图的示例代码

曲面三角剖分

在某些应用场景下,上述这些要求均匀采样的网格数据显得太过严格且不太容易实现。这时就可以使用三角剖分部分图形。

theta = 2 * np.pi * np.random.random(1000)
r = 6 * np.random.random(1000)
x = np.ravel(r * np.sin(theta))
y = np.ravel(r * np.cos(theta))
z = f(x, y)

ax = plt.axes(projection='3d')
ax.scatter(x, y, z, c=z, cmap='viridis', linewidth=0.5)

如何用Matplotlib 画三维图的示例代码

#上图还有许多地方需要修补,这些工作可以由ax.plot_trisurf函数帮助我们完成。它首先找到一组所有点都连接起来的三角形,然后用这些三角形创建曲面
ax = plt.axes(projection='3d')
ax.plot_trisurf(x, y, z, cmap='viridis', edgecolor='none')

如何用Matplotlib 画三维图的示例代码

莫比乌斯带(应用曲面三角剖分)

#绘制莫比乌斯带
#由于它是一条二维带,因此需要两个内在维度。theta维度取值范围是0~2pi,宽度维度w取值范围是-1~1
theta = np.linspace(0, 2 * np.pi, 30)
w = np.linspace(-0.25, 0.25, 8)
w, theta = np.meshgrid(w, theta)
phi = 0.5 * theta
#x-y平面内的半径
r = 1 + w * np.cos(phi)

x = np.ravel(r * np.cos(theta))
y = np.ravel(r * np.sin(theta))
z = np.ravel(w * np.sin(phi))

#要画出莫比乌斯带,还必须保证三角部分是正确的。最好的方法是首先用基本参数化方法定义三角部分,然后用Matplotlib将
#这个三角剖分映射到莫比乌斯带的三维空间里
from matplotlib.tri import Triangulation
tri = Triangulation(np.ravel(w), np.ravel(theta))
ax = plt.axes(projection='3d')
ax.plot_trisurf(x, y, z, triangles=tri.triangles, cmap='viridis', linewidth=0.2)
ax.set_xlim(-1, 1);ax.set_ylim(-1,1);ax.set_zlim(-1,1)

如何用Matplotlib 画三维图的示例代码

到此这篇关于如何用Matplotlib 画三维图的示例代码的文章就介绍到这了,更多相关Matplotlib 三维图内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现ping的方法
Jul 06 Python
python中string模块各属性以及函数的用法介绍
May 30 Python
PyQt5每天必学之工具提示功能
Apr 19 Python
WxPython建立批量录入框窗口
Feb 27 Python
python实现维吉尼亚加密法
Mar 20 Python
详解用python实现基本的学生管理系统(文件存储版)(python3)
Apr 25 Python
python实现点击按钮修改数据的方法
Jul 17 Python
在Python中使用turtle绘制多个同心圆示例
Nov 23 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
Jan 04 Python
使用python实现CGI环境搭建过程解析
Apr 28 Python
Python爬虫网络请求之代理服务器和动态Cookies
Apr 12 Python
Django中celery的使用项目实例
Jul 07 Python
Matplotlib.pyplot 三维绘图的实现示例
Jul 28 #Python
Python同时迭代多个序列的方法
Jul 28 #Python
Python如何读取、写入JSON数据
Jul 28 #Python
python3.6中anaconda安装sklearn踩坑实录
Jul 28 #Python
Python基于xlutils修改表格内容过程解析
Jul 28 #Python
Python如何读取、写入CSV数据
Jul 28 #Python
PyQt中使用QtSql连接MySql数据库的方法
Jul 28 #Python
You might like
FCKeditor添加自定义按钮
2008/03/27 PHP
php自动注册登录验证机制实现代码
2011/12/20 PHP
php strnatcmp()函数的用法总结
2013/11/27 PHP
phplot生成图片类用法详解
2015/01/06 PHP
php在linux下检测mysql同步状态的方法
2015/01/15 PHP
在Debian系统下配置LNMP的教程
2015/07/09 PHP
PHP数学运算与数据处理实例分析
2016/04/01 PHP
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
2019/12/13 PHP
使用自定义setTimeout和setInterval使之可以传递参数和对象参数
2009/04/24 Javascript
js 实现菜单上下显示附效果图
2013/11/21 Javascript
JavaScript设计模式之工厂模式和构造器模式
2015/02/11 Javascript
JS实现仿Windows7风格的网页右键菜单效果代码
2015/09/11 Javascript
jQuery增加、删除及修改select option的方法
2016/08/19 Javascript
详解自动生成博客目录案例
2016/12/09 Javascript
JS双击变input框批量修改内容
2016/12/12 Javascript
JavaScript实现弹窗效果代码分析
2017/03/09 Javascript
VSCode配置react开发环境的步骤
2017/12/27 Javascript
nodejs操作mongodb的填删改查模块的制作及引入实例
2018/01/02 NodeJs
vue通过路由实现页面刷新的方法
2018/01/25 Javascript
Node.js的进程管理的深入理解
2019/01/09 Javascript
element-ui点击查看大图的方法示例
2020/12/14 Javascript
Python中对列表排序实例
2015/01/04 Python
python制作mysql数据迁移脚本
2019/01/01 Python
python 寻找离散序列极值点的方法
2019/07/10 Python
设置jupyter中DataFrame的显示限制方式
2020/04/12 Python
浅谈Python中re.match()和re.search()的使用及区别
2020/04/14 Python
python 错误处理 assert详解
2020/04/20 Python
python 解决mysql where in 对列表(list,,array)问题
2020/06/06 Python
Sublime Text3最新激活注册码分享适用2020最新版 亲测可用
2020/11/12 Python
Ticketmaster德国票务网站:购买音乐会和体育等门票
2016/11/14 全球购物
应届生污水处理求职信
2013/11/06 职场文书
中学生励志演讲稿
2014/04/26 职场文书
运动会报道稿300字
2014/10/02 职场文书
党员教师群众路线思想汇报范文
2014/10/28 职场文书
2014年驾驶员工作总结
2014/11/18 职场文书
小学语文国培研修日志
2015/11/13 职场文书