如何用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实现的DES加密算法和3DES加密算法实例
Jun 03 Python
python简单实现获取当前时间
Aug 27 Python
Python中音频处理库pydub的使用教程
Jun 07 Python
python之文件读取一行一行的方法
Jul 12 Python
python+opencv+caffe+摄像头做目标检测的实例代码
Aug 03 Python
如何用Python制作微信好友个性签名词云图
Jun 28 Python
Python3+Requests+Excel完整接口自动化测试框架的实现
Oct 11 Python
python处理excel绘制雷达图
Oct 18 Python
TensorFlow查看输入节点和输出节点名称方式
Jan 04 Python
python enumerate内置函数用法总结
Jan 07 Python
pytorch实现特殊的Module--Sqeuential三种写法
Jan 15 Python
Keras预训练的ImageNet模型实现分类操作
Jul 07 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
用来解析.htgroup文件的PHP类
2012/09/05 PHP
Yii Framework框架开发微信公众平台示例
2020/04/26 PHP
使用onbeforeunload属性后的副作用
2007/03/08 Javascript
基于JQuery制作的产品广告效果
2010/12/08 Javascript
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
2011/10/24 Javascript
jquery scrollTop方法根据滚动像素显示隐藏顶部导航条
2013/05/27 Javascript
js showModalDialog 弹出对话框的简单实例(子窗体)
2014/01/07 Javascript
javascript 获取iframe里页面中元素值的方法
2014/02/17 Javascript
node.js中的url.format方法使用说明
2014/12/10 Javascript
Js为表单动态添加节点内容的方法
2015/02/10 Javascript
javascript顺序加载图片的方法
2015/07/18 Javascript
Node.js本地文件操作之文件拷贝与目录遍历的方法
2016/02/16 Javascript
jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)
2016/05/27 Javascript
解决html input验证只能输入数字,不能输入其他的问题
2017/07/21 Javascript
laydate 显示结束时间不小于开始时间的实例
2017/08/11 Javascript
详解vue-cli 2.0配置文件(小结)
2019/01/14 Javascript
在 Vue 应用中使用 Netlify 表单功能的方法详解
2019/06/03 Javascript
微信小程序图片左右摆动效果详解
2019/07/13 Javascript
viewer.js一个强大的基于jQuery的图像查看插件(支持旋转、缩放)
2020/04/01 jQuery
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
2015/02/04 Python
Python实现建立SSH连接的方法
2015/06/03 Python
结合Python的SimpleHTTPServer源码来解析socket通信
2016/06/27 Python
Python OpenCV读取png图像转成jpg图像存储的方法
2018/10/28 Python
使用Python开发SQLite代理服务器的方法
2018/12/07 Python
selenium跳过webdriver检测并模拟登录淘宝
2019/06/12 Python
python解析xml文件方式(解析、更新、写入)
2020/03/05 Python
Python基于模块Paramiko实现SSHv2协议
2020/04/28 Python
在python3.64中安装pyinstaller库的方法步骤
2020/06/02 Python
eBay英国购物网站:eBay.co.uk
2019/06/19 全球购物
财务部副经理岗位职责范本
2014/06/17 职场文书
党员群众路线教育实践活动剖析材料
2014/10/10 职场文书
会计工作岗位职责
2015/02/03 职场文书
2016年大学生暑期社会实践方案
2015/11/26 职场文书
2016年3月份红领巾广播稿
2015/12/21 职场文书
2019入党申请书范文3篇
2019/08/21 职场文书
创业计划书之闲置物品置换中心
2019/12/25 职场文书