如何用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双向链表实现实例代码
Nov 21 Python
Python的函数的一些高阶特性
Apr 27 Python
python连接MySQL数据库实例分析
May 12 Python
Python获取当前路径实现代码
May 08 Python
老生常谈Python startswith()函数与endswith函数
Sep 08 Python
mac安装scrapy并创建项目的实例讲解
Jun 13 Python
python远程调用rpc模块xmlrpclib的方法
Jan 11 Python
python 并发编程 多路复用IO模型详解
Aug 20 Python
python实现UDP协议下的文件传输
Mar 20 Python
Python基础之hashlib模块详解
May 06 Python
python字典的元素访问实例详解
Jul 21 Python
Python可变集合和不可变集合的构造方法大全
Dec 06 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
9个实用的PHP代码片段分享
2015/01/22 PHP
phpmyadmin下载、安装、配置教程
2017/05/16 PHP
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
2017/08/01 PHP
laravel 解决强制跳转 https的问题
2019/10/22 PHP
JavaScript 撑出页面文字换行
2009/06/15 Javascript
javascript 写的一个简单的timer
2009/07/30 Javascript
location.search在客户端获取Url参数的方法
2010/06/08 Javascript
扩展javascript的Date方法实现代码(prototype)
2010/11/20 Javascript
Juqery Html(),append()等方法的Bug解决方法
2010/12/13 Javascript
javascript函数作用域学习示例(js作用域)
2014/01/13 Javascript
jQuery实现简单的点赞效果
2020/05/29 Javascript
AngularJs bootstrap搭载前台框架——js控制部分
2016/09/01 Javascript
微信小程序 数据访问实例详解
2016/10/08 Javascript
基于Vue实现页面切换左右滑动效果
2020/06/29 Javascript
使用DataTable插件实现异步加载数据
2017/11/19 Javascript
JavaScript冒泡算法原理与实现方法深入理解
2020/06/04 Javascript
vue-cli3项目打包后自动化部署到服务器的方法
2020/09/16 Javascript
JavaScript实现表单验证功能
2020/12/09 Javascript
手把手教你如何编译打包video.js
2020/12/09 Javascript
解决vue使用vant轮播组件swipe + flex时文字抖动问题
2021/01/07 Vue.js
[59:30]完美世界DOTA2联赛PWL S3 access vs LBZS 第二场 12.20
2020/12/23 DOTA
Python 字典(Dictionary)操作详解
2014/03/11 Python
python使用正则表达式检测密码强度源码分享
2014/06/11 Python
python与sqlite3实现解密chrome cookie实例代码
2018/01/20 Python
Python解决抛小球问题 求小球下落经历的距离之和示例
2018/02/01 Python
python实现C4.5决策树算法
2018/08/29 Python
pycharm运行出现ImportError:No module named的解决方法
2018/10/13 Python
python 随机生成10位数密码的实现代码
2019/06/27 Python
pymysql模块使用简介与示例
2020/11/17 Python
哥德堡通行证:Gothenburg Pass
2019/12/09 全球购物
新年抽奖获奖感言
2014/03/02 职场文书
外贸专业求职信
2014/03/09 职场文书
聚美优品励志广告词
2014/03/14 职场文书
合同意向书范本
2014/07/30 职场文书
2015年仓库管理工作总结
2015/05/25 职场文书
CSS 一行代码实现头像与国旗的融合
2021/10/24 HTML / CSS