如何用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 相关文章推荐
py中的目录与文件判别代码
Jul 16 Python
Python Socket编程入门教程
Jul 11 Python
使用Python的Flask框架实现视频的流媒体传输
Mar 31 Python
python获取当前用户的主目录路径方法(推荐)
Jan 12 Python
Python使用sqlalchemy模块连接数据库操作示例
Mar 13 Python
获取django框架orm query执行的sql语句实现方法分析
Jun 20 Python
django将网络中的图片,保存成model中的ImageField的实例
Aug 07 Python
Python安装与卸载流程详细步骤(图解)
Feb 20 Python
python实现数字炸弹游戏程序
Jul 17 Python
celery在python爬虫中定时操作实例讲解
Nov 27 Python
python中字符串String及其常见操作指南(方法、函数)
Apr 06 Python
Python爬取奶茶店数据分析哪家最好喝以及性价比
Sep 23 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
总集篇&特番节目先行播出!《SAO Alicization War of Underworld》第2季度TV动画4月25日放送!
2020/03/06 日漫
php中json_encode中文编码问题分析
2011/09/13 PHP
PHP生成sitemap.xml地图函数
2013/11/13 PHP
php实现图片添加描边字和马赛克的方法
2014/12/10 PHP
PHP+jQuery实现双击修改table表格功能示例
2019/02/21 PHP
ExtJS 2.0实用简明教程 之ExtJS版的Hello
2009/04/29 Javascript
基于jquery的表格排序
2010/09/11 Javascript
js实现单击图片放大图片的方法
2015/02/17 Javascript
PHP守护进程实例
2015/03/06 Javascript
jQuery简单实现仿京东商城的左侧菜单效果代码
2015/09/09 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
2016/05/21 Javascript
实例讲解jQuery中对事件的命名空间的运用
2016/05/24 Javascript
webpack2.0搭建前端项目的教程详解
2017/04/05 Javascript
vue2.0 实现导航守卫(路由守卫)
2018/05/21 Javascript
微信头像地址失效踩坑记附带解决方案
2019/09/23 Javascript
JavaScript 作用域实例分析
2019/10/02 Javascript
VUE单页面切换动画代码(全网最好的切换效果)
2019/10/31 Javascript
在Python的setuptools框架下生成egg的教程
2015/04/13 Python
Python中for循环和while循环的基本使用方法
2015/08/21 Python
一步步教你用python的scrapy编写一个爬虫
2019/04/17 Python
简单了解python高阶函数map/reduce
2019/06/28 Python
python requests包的request()函数中的参数-params和data的区别介绍
2020/05/05 Python
Python面向对象特殊属性及方法解析
2020/09/16 Python
HTML5 使用 sessionStorage 进行页面传值的方法
2018/07/02 HTML / CSS
html5时钟实现代码
2010/10/22 HTML / CSS
YSL圣罗兰美妆俄罗斯官网:Yves Saint Lauret RU
2020/09/23 全球购物
C面试题
2015/10/08 面试题
优秀高中生事迹材料
2014/02/11 职场文书
校园主题婚礼活动策划方案
2014/09/15 职场文书
合作经营协议书范本
2014/09/16 职场文书
介绍信样本
2015/01/31 职场文书
升职自荐信范文
2015/03/27 职场文书
2015年网络舆情工作总结
2015/07/24 职场文书
2016年村党支部公开承诺书
2016/03/24 职场文书
SQL基础的查询语句
2021/11/11 MySQL
idea下配置tomcat避坑详解
2022/04/12 Servers