如何用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面向对象编程中的类和对象学习教程
Mar 30 Python
python中split方法用法分析
Apr 17 Python
理解Python中函数的参数
Apr 27 Python
Centos Python2 升级到Python3的简单实现
Jun 21 Python
python strip() 函数和 split() 函数的详解及实例
Feb 03 Python
AI人工智能 Python实现人机对话
Nov 13 Python
python 快速把超大txt文件转存为csv的实例
Oct 26 Python
Python3中urlencode和urldecode的用法详解
Jul 23 Python
Python上下文管理器用法及实例解析
Nov 11 Python
使用Python paramiko模块利用多线程实现ssh并发执行操作
Dec 05 Python
通过cmd进入python的步骤
Jun 16 Python
Python分析最近大火的网剧《隐秘的角落》
Jul 02 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
3种平台下安装php4经验点滴
2006/10/09 PHP
解析posix与perl标准的正则表达式区别
2013/06/17 PHP
php设计模式之命令模式使用示例
2014/03/02 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(八)
2014/06/23 PHP
ThinkPHP中的常用查询语言汇总
2014/08/22 PHP
php微信公众平台开发类实例
2015/04/01 PHP
网页里控制图片大小的相关代码
2006/06/25 Javascript
图片延迟加载的实现代码(模仿懒惰)
2013/03/29 Javascript
js 实现 input type="file" 文件上传示例代码
2013/08/07 Javascript
javascript full screen 全屏显示页面元素的方法
2013/09/27 Javascript
弹出最简单的模式化遮罩层的js代码
2013/12/04 Javascript
jquery ajax传递中文参数乱码问题及解决方法说明
2014/02/07 Javascript
jquery使用Cookie和JSON记录用户最近浏览历史
2016/04/19 Javascript
用JS中split方法实现彩色文字背景效果实例
2016/08/24 Javascript
jQuery实现点击DIV同时点击CheckBox,并为DIV上背景色的实例
2017/12/18 jQuery
Vue axios设置访问基础路径方法
2018/09/19 Javascript
在Vue项目中引入JQuery-ui插件的讲解
2019/01/27 jQuery
Vue的生命周期操作示例
2019/09/17 Javascript
js刷新页面location.reload()用法详解
2019/12/09 Javascript
9个JavaScript日常开发小技巧
2020/10/06 Javascript
Python基于pillow判断图片完整性的方法
2016/09/18 Python
PyTorch上实现卷积神经网络CNN的方法
2018/04/28 Python
OpenCV 轮廓检测的实现方法
2019/07/03 Python
python ftplib模块使用代码实例
2019/12/31 Python
基于python判断字符串括号是否闭合{}[]()
2020/09/21 Python
pandas 按日期范围筛选数据的实现
2021/02/20 Python
美国新蛋IT数码商城:Newegg.com
2016/07/21 全球购物
医学生实习自荐信
2013/10/01 职场文书
十八大闭幕感言
2014/01/22 职场文书
党员违纪检讨书怎么写
2014/11/01 职场文书
财政局个人总结
2015/03/04 职场文书
2015年试用期自我评价范文
2015/03/10 职场文书
个人工作决心书
2015/09/22 职场文书
python实现黄金分割法的示例代码
2021/04/28 Python
详解Laravel框架的依赖注入功能
2021/05/27 PHP
使用 Apache 反向代理的设置技巧
2022/01/18 Servers