如何用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 13 Python
Python实现连接postgresql数据库的方法分析
Dec 27 Python
PyQt5响应回车事件的方法
Jun 25 Python
Django logging配置及使用详解
Jul 23 Python
基于python实现把图片转换成素描
Nov 13 Python
Python Sympy计算梯度、散度和旋度的实例
Dec 06 Python
python实现可下载音乐的音乐播放器
Feb 25 Python
如何搭建pytorch环境的方法步骤
May 06 Python
完美解决keras保存好的model不能成功加载问题
Jun 11 Python
解决keras使用cov1D函数的输入问题
Jun 29 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
Jul 14 Python
baselines示例程序train_cartpole.py的ImportError
May 20 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
thinkphp模板继承实例简述
2014/11/26 PHP
PHP获取input输入框中的值去数据库比较显示出来
2016/11/16 PHP
PHP 的Opcache加速的使用方法
2017/12/29 PHP
js 对象是否存在判断
2009/07/15 Javascript
juqery 学习之六 CSS--css、位置、宽高
2011/02/11 Javascript
javascript间隔定时器(延时定时器)学习 间隔调用和延时调用
2014/01/13 Javascript
简单的JavaScript互斥锁分享
2014/02/02 Javascript
Node.js中使用mongoskin操作mongoDB实例
2014/09/28 Javascript
javascript禁止超链接跳转的方法
2016/02/02 Javascript
百度地图API之百度地图退拽标记点获取经纬度的实现代码
2017/01/12 Javascript
js图片放大镜实例讲解(必看篇)
2017/07/17 Javascript
解决vue 引入子组件报错的问题
2018/09/06 Javascript
JS Math对象与Math方法实例小结
2019/07/05 Javascript
ES6基础之数组和对象的拓展实例详解
2019/08/22 Javascript
js实现上下左右键盘控制div移动
2020/01/16 Javascript
Vue中fragment.js使用方法小结
2020/02/17 Javascript
jQuery实现移动端下拉展现新的内容回弹动画
2020/06/24 jQuery
vue中activated的用法
2021/01/03 Vue.js
[01:51]2014DOTA2西雅图邀请赛 MVP 外卡赛black场间采访
2014/07/09 DOTA
python3使用pyqt5制作一个超简单浏览器的实例
2017/10/19 Python
Python接收手机短信的代码整理
2020/08/02 Python
基于tensorflow __init__、build 和call的使用小结
2021/02/26 Python
苹果中国官方网站:Apple中国
2016/07/22 全球购物
美国家用电器和电子产品商店:Abt
2016/09/06 全球购物
Fabletics官网:美国运动服饰品牌,由好莱坞女演员凯特·哈德森创立
2019/10/19 全球购物
英语专业个人求职信范文
2014/02/01 职场文书
《彩色世界》教学反思
2014/04/12 职场文书
计算机科学与技术专业求职信
2014/09/03 职场文书
专题组织生活会发言材料
2014/10/17 职场文书
2015年党支部公开承诺书
2015/01/22 职场文书
保送生自荐信范文
2015/03/26 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
党员发展大会主持词
2015/07/03 职场文书
2019假期福利管理制度!
2019/07/15 职场文书
go设置多个GOPATH的方式
2021/05/05 Golang
Python采集股票数据并制作可视化柱状图
2022/04/04 Python