Python三维绘图之Matplotlib库的使用方法


Posted in Python onSeptember 20, 2020

前言

在遇到三维数据时,三维图像能给我们对数据带来更加深入地理解。python的matplotlib库就包含了丰富的三维绘图工具。

1.创建三维坐标轴对象Axes3D

创建Axes3D主要有两种方式,一种是利用关键字projection='3d'l来实现,另一种则是通过从mpl_toolkits.mplot3d导入对象Axes3D来实现,目的都是生成具有三维格式的对象Axes3D.

#方法一,利用关键字
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

#定义坐标轴
fig = plt.figure()
ax1 = plt.axes(projection='3d')
#ax = fig.add_subplot(111,projection='3d') #这种方法也可以画多个子图


#方法二,利用三维轴方法
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

#定义图像和三维格式坐标轴
fig=plt.figure()
ax2 = Axes3D(fig)

2.三维曲线和散点

随后在定义的坐标轴上画图:

import numpy as np
z = np.linspace(0,13,1000)
x = 5*np.sin(z)
y = 5*np.cos(z)
zd = 13*np.random.random(100)
xd = 5*np.sin(zd)
yd = 5*np.cos(zd)
ax1.scatter3D(xd,yd,zd, cmap='Blues') #绘制散点图
ax1.plot3D(x,y,z,'gray') #绘制空间曲线
plt.show()

Python三维绘图之Matplotlib库的使用方法

3.三维曲面

下一步画三维曲面

fig = plt.figure() #定义新的三维坐标轴
ax3 = plt.axes(projection='3d')

#定义三维数据
xx = np.arange(-5,5,0.5)
yy = np.arange(-5,5,0.5)
X, Y = np.meshgrid(xx, yy)
Z = np.sin(X)+np.cos(Y)


#作图
ax3.plot_surface(X,Y,Z,cmap='rainbow')
#ax3.contour(X,Y,Z, zdim='z',offset=-2,cmap='rainbow) #等高线图,要设置offset,为Z的最小值
plt.show()

Python三维绘图之Matplotlib库的使用方法

如果加入渲染时的步长,会得到更加清晰细腻的图像:
ax3.plot_surface(X,Y,Z,rstride = 1, cstride = 1,cmap='rainbow'),其中的row和cloum_stride为横竖方向的绘图采样步长,越小绘图越精细。

Python三维绘图之Matplotlib库的使用方法

4.等高线

同时还可以将等高线投影到不同的面上:

from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

#定义坐标轴
fig4 = plt.figure()
ax4 = plt.axes(projection='3d')

#生成三维数据
xx = np.arange(-5,5,0.1)
yy = np.arange(-5,5,0.1)
X, Y = np.meshgrid(xx, yy)
Z = np.sin(np.sqrt(X**2+Y**2))

#作图
ax4.plot_surface(X,Y,Z,alpha=0.3,cmap='winter')   #生成表面, alpha 用于控制透明度
ax4.contour(X,Y,Z,zdir='z', offset=-3,cmap="rainbow") #生成z方向投影,投到x-y平面
ax4.contour(X,Y,Z,zdir='x', offset=-6,cmap="rainbow") #生成x方向投影,投到y-z平面
ax4.contour(X,Y,Z,zdir='y', offset=6,cmap="rainbow")  #生成y方向投影,投到x-z平面
#ax4.contourf(X,Y,Z,zdir='y', offset=6,cmap="rainbow")  #生成y方向投影填充,投到x-z平面,contourf()函数

#设定显示范围
ax4.set_xlabel('X')
ax4.set_xlim(-6, 4) #拉开坐标轴范围显示投影
ax4.set_ylabel('Y')
ax4.set_ylim(-4, 6)
ax4.set_zlabel('Z')
ax4.set_zlim(-3, 3)

plt.show()

Python三维绘图之Matplotlib库的使用方法Python三维绘图之Matplotlib库的使用方法

5.随机散点图

可以利用scatter()生成各种不同大小,颜色的散点图,其参数如下:

#函数定义
matplotlib.pyplot.scatter(x, y, 
	s=None,  #散点的大小 array scalar
	c=None,  #颜色序列  array、sequency
	marker=None,  #点的样式
	cmap=None,  #colormap 颜色样式
	norm=None,  #归一化 归一化的颜色camp
	vmin=None, vmax=None,  #对应上面的归一化范围
 	alpha=None,   #透明度
	linewidths=None,  #线宽
	verts=None,  #
	edgecolors=None, #边缘颜色
	data=None, 
	**kwargs
	)
#ref:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.scatter.html
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

#定义坐标轴
fig4 = plt.figure()
ax4 = plt.axes(projection='3d')

#生成三维数据
xx = np.random.random(20)*10-5  #取100个随机数,范围在5~5之间
yy = np.random.random(20)*10-5
X, Y = np.meshgrid(xx, yy)
Z = np.sin(np.sqrt(X**2+Y**2))

#作图
ax4.scatter(X,Y,Z,alpha=0.3,c=np.random.random(400),s=np.random.randint(10,20, size=(20, 40)))   #生成散点.利用c控制颜色序列,s控制大小

#设定显示范围

plt.show()

Python三维绘图之Matplotlib库的使用方法

Finish

总结

到此这篇关于Python三维绘图之Matplotlib库使用的文章就介绍到这了,更多相关Python三维绘图Matplotlib库内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python判断文本中消息重复次数的方法
Apr 27 Python
好用的Python编辑器WingIDE的使用经验总结
Aug 31 Python
浅谈django model的get和filter方法的区别(必看篇)
May 23 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
Mar 05 Python
django静态文件加载的方法
May 20 Python
Django渲染Markdown文章目录的方法示例
Jan 02 Python
在python里从协程返回一个值的示例
Feb 19 Python
Python django框架应用中实现获取访问者ip地址示例
May 17 Python
numpy.where() 用法详解
May 27 Python
python+Django实现防止SQL注入的办法
Oct 31 Python
Python Selenium安装及环境配置的实现
Mar 17 Python
Python 中如何使用 virtualenv 管理虚拟环境
Jan 21 Python
scrapy利用selenium爬取豆瓣阅读的全步骤
Sep 20 #Python
Python操作dict时避免出现KeyError的几种解决方法
Sep 20 #Python
python中random.randint和random.randrange的区别详解
Sep 20 #Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
Sep 20 #Python
Python Pillow(PIL)库的用法详解
Sep 19 #Python
Python自动化xpath实现自动抢票抢货
Sep 19 #Python
python 贪心算法的实现
Sep 18 #Python
You might like
Discuz板块横排显示图片的实现方法
2007/05/28 PHP
PHP日期函数date格式化UNIX时间的方法
2015/03/19 PHP
Yii2中使用join、joinwith多表关联查询
2016/06/30 PHP
php微信公众账号开发之前五个坑(一)
2016/09/18 PHP
php使用curl伪造浏览器访问操作示例
2019/09/30 PHP
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
jquery实现可拖拽弹出层特效
2015/01/04 Javascript
JS实现批量上传文件并显示进度功能
2017/06/27 Javascript
微信小程序之裁剪图片成圆形的实现代码
2018/10/11 Javascript
微信上传视频文件提示(推荐)
2018/11/22 Javascript
vue通信方式EventBus的实现代码详解
2019/06/10 Javascript
解决layui动态加载复选框无法选中的问题
2019/09/20 Javascript
Node.JS获取GET,POST数据之queryString模块使用方法详解
2020/02/06 Javascript
js实现全选和全不选
2020/07/28 Javascript
基于javascript原生判断DOM是否加载完毕
2020/10/14 Javascript
ES11新增的这9个新特性,你都掌握了吗
2020/10/15 Javascript
vue+iview实现文件上传
2020/11/17 Vue.js
Python数据类型详解(二)列表
2016/05/08 Python
django 发送邮件和缓存的实现代码
2018/07/18 Python
解读python如何实现决策树算法
2018/10/11 Python
Python使用scrapy爬取阳光热线问政平台过程解析
2019/08/14 Python
基于Python3.7.1无法导入Numpy的解决方式
2020/03/09 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
2020/05/03 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
2020/11/25 Python
html5开发之viewport使用
2013/10/17 HTML / CSS
C语言面试题
2013/05/19 面试题
适用于所有创业者的创业计划书
2014/02/05 职场文书
《金子》教学反思
2014/04/13 职场文书
医学求职自荐信
2014/06/21 职场文书
2014优秀大学生简历自我评价
2014/09/15 职场文书
领导干部作风建设剖析材料
2014/10/11 职场文书
2015年司机工作总结
2015/04/23 职场文书
2016年小学端午节活动总结
2016/04/01 职场文书
关于 Python json中load和loads区别
2021/11/07 Python
如何用vue实现网页截图你知道吗
2021/11/17 Vue.js