如何用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中随机函数random用法实例
Apr 30 Python
python写入中英文字符串到文件的方法
May 06 Python
Python字符串替换实例分析
May 11 Python
在Python程序中操作文件之flush()方法的使用教程
May 24 Python
python使用thrift教程的方法示例
Mar 21 Python
python实现名片管理系统项目
Apr 26 Python
Numpy数组array和矩阵matrix转换方法
Aug 05 Python
使用OpenCV实现仿射变换—旋转功能
Aug 29 Python
Django REST框架创建一个简单的Api实例讲解
Nov 05 Python
基于python3生成标签云代码解析
Feb 18 Python
基于tensorflow权重文件的解读
May 26 Python
golang特有程序结构入门教程
Jun 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
php中使用preg_replace函数匹配图片并加上链接的方法
2013/02/06 PHP
PHP实现多进程并行操作的详解(可做守护进程)
2013/06/18 PHP
PHP共享内存用法实例分析
2016/02/12 PHP
PHP自定义函数格式化json数据示例
2016/09/14 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
thinkPHP框架中layer.js的封装与使用方法示例
2019/01/18 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
解决FLASH需要点击激活的代码
2006/12/20 Javascript
jquery的冒泡事件的阻止与允许(三种实现方法)
2013/02/01 Javascript
基于jquery实现的自动补全功能
2015/03/12 Javascript
深入探究node之Transform
2017/07/20 Javascript
利用pm2部署多个node.js项目的配置教程
2017/10/22 Javascript
elemetUi 组件--el-upload实现上传Excel文件的实例
2017/10/27 Javascript
Jquery实现无缝向上循环滚动列表的特效
2019/02/13 jQuery
vue 全局环境切换问题
2019/10/27 Javascript
Vue组件模板及组件互相引用代码实例
2020/03/11 Javascript
JQuery省市联动效果实现过程详解
2020/05/08 jQuery
让python的Cookie.py模块支持冒号做key的方法
2010/12/28 Python
在Django中创建URLconf相关的通用视图的方法
2015/07/20 Python
详解Python中的文件操作
2016/08/28 Python
python+matplotlib绘制饼图散点图实例代码
2018/01/20 Python
Python多线程爬取豆瓣影评API接口
2019/10/22 Python
Python scrapy增量爬取实例及实现过程解析
2019/12/24 Python
在flask中使用python-dotenv+flask-cli自定义命令(推荐)
2020/01/05 Python
tensorflow mnist 数据加载实现并画图效果
2020/02/05 Python
python实现人机五子棋
2020/03/25 Python
Python连接mysql方法及常用参数
2020/09/01 Python
Python提取视频中图片的示例(按帧、按秒)
2020/10/22 Python
Vans英国官方网站:美国南加州的原创极限运动潮牌
2017/01/20 全球购物
The Hut英国:英国领先的豪华在线百货商店
2019/07/26 全球购物
介绍一下gcc特性
2012/01/20 面试题
高级技校毕业生自荐信
2013/11/18 职场文书
爱与责任演讲稿
2014/05/20 职场文书
作风大整顿心得体会
2014/09/10 职场文书
2015年学校医务室工作总结
2015/07/20 职场文书
python分分钟绘制精美地图海报
2022/02/15 Python