如何用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实现忽略大小写对字符串列表排序的方法
Sep 25 Python
Python使用PIL库实现验证码图片的方法
Mar 11 Python
详解Python map函数及Python map()函数的用法
Nov 16 Python
在python 中实现运行多条shell命令
Jan 07 Python
django的ORM模型的实现原理
Mar 04 Python
python数据归一化及三种方法详解
Aug 06 Python
Python  Django 母版和继承解析
Aug 09 Python
Python 获取指定文件夹下的目录和文件的实现
Aug 30 Python
python中必要的名词解释
Nov 20 Python
Python3如何判断三角形的类型
Apr 12 Python
Python virtualenv虚拟环境实现过程解析
Apr 18 Python
python中四舍五入的正确打开方式
Jan 18 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 pathinfo()获得文件的路径、名称等信息说明
2011/09/13 PHP
php版微信公众号自定义分享内容实现方法
2016/09/22 PHP
js 数值项目的格式化函数代码
2010/05/14 Javascript
javascript dom代码应用 简单的相册[firefox only]
2010/06/12 Javascript
JS根据年月获得当月天数的实现代码
2014/07/03 Javascript
Node.js事件循环(Event Loop)和线程池详解
2015/01/28 Javascript
Javascript实现计算个人所得税
2015/05/10 Javascript
js事件监听器用法实例详解
2015/06/01 Javascript
JavaScript动态生成二维码图片
2016/04/20 Javascript
window.onload绑定多个事件的两种解决方案
2016/05/15 Javascript
jQuery实现输入框邮箱内容自动补全与上下翻动显示效果【附demo源码下载】
2016/09/20 Javascript
Node.JS利用PhantomJs抓取网页入门教程
2017/05/19 Javascript
VUE利用vuex模拟实现新闻点赞功能实例
2017/06/28 Javascript
vue toggle做一个点击切换class(实例讲解)
2018/03/13 Javascript
p5.js入门教程之图片加载
2018/03/20 Javascript
JS闭包经典实例详解
2018/12/20 Javascript
详解vue几种主动刷新的方法总结
2019/02/19 Javascript
vue遍历生成的输入框 绑定及修改值示例
2019/10/30 Javascript
JS数组扁平化、去重、排序操作实例详解
2020/02/24 Javascript
浅谈vue中document.getElementById()拿到的是原值的问题
2020/07/26 Javascript
微信小程序实现通讯录列表展开收起
2020/11/18 Javascript
python中 ? : 三元表达式的使用介绍
2013/10/09 Python
Python time模块详解(常用函数实例讲解,非常好)
2014/04/24 Python
Python基于PycURL实现POST的方法
2015/07/25 Python
pandas进行数据的交集与并集方式的数据合并方法
2018/06/27 Python
python对于requests的封装方法详解
2019/01/03 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
2019/06/26 Python
OpenCV+Python--RGB转HSI的实现
2019/11/27 Python
Python decorator拦截器代码实例解析
2020/04/04 Python
CSS3制作日历实现代码
2012/01/21 HTML / CSS
英国领先的互联网葡萄酒礼品商:Vintage Wine & Port
2019/05/24 全球购物
New Balance法国官方网站:购买鞋子和服装
2019/09/01 全球购物
在SQL Server中创建数据库主要有那种方式
2013/09/10 面试题
抗洪救灾感谢信
2015/01/22 职场文书
教师求职信怎么写
2015/03/20 职场文书
文明礼仪倡议书
2015/04/28 职场文书