如何用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制作一个桌面便签软件
Aug 09 Python
Python循环语句中else的用法总结
Sep 11 Python
python+selenium+autoit实现文件上传功能
Aug 23 Python
PyTorch线性回归和逻辑回归实战示例
May 22 Python
Python实现的微信好友数据分析功能示例
Jun 21 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
Jun 22 Python
Python英文文章词频统计(14份剑桥真题词频统计)
Oct 13 Python
python实现串口通信的示例代码
Feb 10 Python
Django中文件上传和文件访问微项目的方法
Apr 27 Python
Python系统公网私网流量监控实现流程
Nov 23 Python
Python将QQ聊天记录生成词云的示例代码
Feb 10 Python
python基础学习之递归函数知识总结
May 26 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
DOTA2 玩家自创拉野攻略 特色英雄快速成长篇
2020/04/20 DOTA
极典R601SW收音机
2021/03/02 无线电
php的一个简单加密解密代码
2014/01/14 PHP
php二维数组转成字符串示例
2014/02/17 PHP
jQuery 白痴级入门教程
2009/11/11 Javascript
两种简单实现菜单高亮显示的JS类代码
2010/06/27 Javascript
ScrollDown的基本操作示例
2013/06/09 Javascript
JavaScript实现QueryString获取GET参数的方法
2013/07/02 Javascript
JS两种定义方式的区别、内部原理
2013/11/21 Javascript
javaScript中with函数用法实例分析
2015/06/08 Javascript
JavaScript之AOP编程实例
2015/07/17 Javascript
JS三级可折叠菜单实现方法
2016/02/29 Javascript
基于JS实现省市联动效果代码分享
2016/06/06 Javascript
jQuery图片瀑布流的简单实现代码
2017/03/15 Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
2017/08/28 Javascript
vue2.x数组劫持原理的实现
2020/04/19 Javascript
[01:32]DOTA2 2015国际邀请赛中国区预选赛第四日战报
2015/05/29 DOTA
Python 的 Socket 编程
2015/03/24 Python
python实现自动更换ip的方法
2015/05/05 Python
Python实现购物程序思路及代码
2017/07/24 Python
python 获取sqlite3数据库的表名和表字段名的实例
2019/07/17 Python
Python开发之基于模板匹配的信用卡数字识别功能
2020/01/13 Python
Django-migrate报错问题解决方案
2020/04/21 Python
OpenCV+python实现实时目标检测功能
2020/06/24 Python
详解selenium + chromedriver 被反爬的解决方法
2020/10/28 Python
python爬取招聘要求等信息实例
2020/11/20 Python
阿联酋团购网站:Groupon阿联酋
2016/10/14 全球购物
北美个性化礼品商店:Things Remembered
2018/06/12 全球购物
英国鞋网:Rubber Sole
2020/03/03 全球购物
金属材料工程个人求职的自我评价
2013/12/04 职场文书
十岁生日家长答谢词
2014/01/17 职场文书
校园安全演讲稿
2014/05/09 职场文书
医院深入开展党的群众路线教育实践活动实施方案
2014/08/27 职场文书
2016应届毕业生自荐信范文
2016/01/28 职场文书
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
2021/06/26 MySQL
Python极值整数的边界探讨分析
2021/09/15 Python