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简单删除目录下文件以及文件夹的方法
May 27 Python
Python编码类型转换方法详解
Jul 01 Python
玩转python selenium鼠标键盘操作(ActionChains)
Apr 12 Python
Django 导出 Excel 代码的实例详解
Aug 11 Python
django中的setting最佳配置小结
Nov 21 Python
快速查询Python文档方法分享
Dec 27 Python
Python实现发送与接收邮件的方法详解
Mar 28 Python
numpy.delete删除一列或多列的方法
Apr 03 Python
opencv3/C++实现视频背景去除建模(BSM)
Dec 11 Python
Python中常用的高阶函数实例详解
Feb 21 Python
最小二乘法及其python实现详解
Feb 24 Python
python之json文件转xml文件案例讲解
Aug 07 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
基于Zookeeper的使用详解
2013/05/02 PHP
fckeditor上传文件按日期存放及重命名方法
2015/05/22 PHP
Yii2――使用数据库操作汇总(增删查改、事务)
2016/12/19 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
2017/08/07 PHP
用户注册常用javascript代码
2009/08/29 Javascript
CCPry JS类库 代码
2009/10/30 Javascript
JavaScript闭包函数访问外部变量的方法
2014/08/27 Javascript
Javascript 运动中Offset的bug解决方案
2014/12/24 Javascript
JavaScript运动减速效果实例分析
2015/08/04 Javascript
浅谈javascript的Touch事件
2015/09/27 Javascript
angular2使用简单介绍
2016/03/01 Javascript
jQuery实现的导航动画效果(附demo源码)
2016/04/01 Javascript
JavaScript中boolean类型之三种情景实例代码
2016/11/21 Javascript
基于wordpress的ajax写法详解
2018/01/02 Javascript
解决vue打包项目后刷新404的问题
2018/03/06 Javascript
nodejs实现套接字服务功能详解
2018/06/21 NodeJs
mock.js实现模拟生成假数据功能示例
2019/01/15 Javascript
JS浮点数运算结果不精确的Bug解决
2019/08/01 Javascript
antd Select下拉菜单动态添加option里的内容操作
2020/11/02 Javascript
Flexible.js可伸缩布局实现方法详解
2020/11/13 Javascript
[14:51]DOTA2 HEROS教学视频教你分分钟做大人-卓尔游侠
2014/06/13 DOTA
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
Python实现从log日志中提取ip的方法【正则提取】
2018/03/31 Python
python生成密码字典的方法
2018/07/06 Python
pandas.read_csv参数详解(小结)
2019/06/21 Python
python 图片二值化处理(处理后为纯黑白的图片)
2019/11/01 Python
Python自定义聚合函数merge与transform区别详解
2020/05/26 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
2021/01/29 Python
HTMl5的存储方式sessionStorage和localStorage详解
2014/03/18 HTML / CSS
珍珠奶茶店创业计划书
2014/01/11 职场文书
小区停车场管理制度
2014/01/27 职场文书
教师四风问题对照检查材料
2014/09/26 职场文书
2015年检验科工作总结
2015/04/27 职场文书
医院合作意向书范本
2015/05/08 职场文书
pytorch通过训练结果的复现设置随机种子
2021/06/01 Python
mysql事务对效率的影响分析总结
2021/10/24 MySQL