如何用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 相关文章推荐
netbeans7安装python插件的方法图解
Dec 24 Python
python 捕获shell脚本的输出结果实例
Jan 04 Python
Python中将变量按行写入txt文本中的方法
Apr 03 Python
jupyter notebook引用from pyecharts.charts import Bar运行报错
Apr 23 Python
解决安装pycharm后不能执行python脚本的问题
Jan 19 Python
Python常见数据类型转换操作示例
May 08 Python
python flask框架实现重定向功能示例
Jul 02 Python
django认证系统实现自定义权限管理的方法
Aug 28 Python
python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例
Mar 02 Python
python安装读取grib库总结(推荐)
Jun 24 Python
Python map及filter函数使用方法解析
Aug 06 Python
python常量折叠基础知识点讲解
Feb 28 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
生成静态页面的PHP类
2006/07/15 PHP
PHP根据IP地址获取所在城市具体实现
2013/11/27 PHP
初识php MVC
2014/09/10 PHP
thinkphp项目如何自定义微信分享描述内容
2017/02/20 PHP
详解PHP发送邮件知识点
2018/05/06 PHP
Mac/Windows下如何安装Node.js
2013/11/22 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
2015/11/17 Javascript
jquery对dom节点的操作【推荐】
2016/04/15 Javascript
jquery中live()方法和bind()方法区别分析
2016/06/23 Javascript
Mvc提交表单的四种方法全程详解
2016/08/10 Javascript
js实现倒计时关键代码
2017/05/05 Javascript
解决vue中post方式提交数据后台无法接收的问题
2018/08/11 Javascript
React实现全局组件的Toast轻提示效果
2018/09/21 Javascript
JS散列表碰撞处理、开链法、HashTable散列示例
2019/02/08 Javascript
微信小程序如何实现radio单选框单击打勾和取消
2020/01/21 Javascript
详解JSON.stringify()的5个秘密特性
2020/05/26 Javascript
js实现简易ATM功能
2020/10/27 Javascript
Python不规范的日期字符串处理类
2014/06/10 Python
Python创建模块及模块导入的方法
2015/05/27 Python
Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法
2017/09/08 Python
python中的文件打开与关闭操作命令介绍
2018/04/26 Python
Python利用splinter实现浏览器自动化操作方法
2018/05/11 Python
numpy中矩阵合并的实例
2018/06/15 Python
Python实现简易过滤删除数字的方法小结
2019/01/09 Python
django框架model orM使用字典作为参数,保存数据的方法分析
2019/06/24 Python
PageFactory设计模式基于python实现
2020/04/14 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
2021/03/03 Python
比利时买床:Beter Bed
2017/12/06 全球购物
团员的自我评价
2013/12/01 职场文书
创业计划书怎样才能打动风投
2014/01/01 职场文书
优秀民警事迹材料
2014/01/29 职场文书
企业年度评优方案
2014/06/02 职场文书
学生穿着不得体检讨书
2014/10/12 职场文书
民事二审代理词
2015/05/25 职场文书
2015年圣诞节寄语
2015/08/17 职场文书
 Redis 串行生成顺序编码的方法实现
2022/04/03 Redis