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实现在windows服务中新建进程的方法
Jun 30 Python
Windows系统下使用flup搭建Nginx和Python环境的方法
Dec 25 Python
Python入门_浅谈逻辑判断与运算符
May 16 Python
python实现列表中最大最小值输出的示例
Jul 09 Python
pip安装python库的方法总结
Aug 02 Python
Python使用itchat 功能分析微信好友性别和位置
Aug 05 Python
Django 导出项目依赖库到 requirements.txt过程解析
Aug 23 Python
python 发送json数据操作实例分析
Oct 15 Python
Django用户登录与注册系统的实现示例
Jun 03 Python
Python的logging模块基本用法
Dec 24 Python
python实现三次密码验证的示例
Apr 29 Python
Python Parser的用法
May 12 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
在php中取得image按钮传递的name值
2006/10/09 PHP
php语言中使用json的技巧及json的实现代码详解
2015/10/27 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
javascript 嵌套的函数(作用域链)
2010/03/15 Javascript
Jquery动态进行图片缩略的原理及实现
2013/08/13 Javascript
jQuery ajax serialize() 方法使用示例
2014/11/02 Javascript
js实现图片漂浮效果的方法
2015/03/02 Javascript
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
2016/05/28 Javascript
jQuery中实现prop()函数控制多选框(全选,反选)
2016/08/19 Javascript
JavaScript获取URL中参数querystring的方法详解
2016/10/11 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
[原创]SyntaxHighlighter自动识别并加载脚本语言
2017/02/07 Javascript
详解VUE的状态控制与延时加载刷新
2017/03/27 Javascript
纯原生js实现贪吃蛇游戏
2020/04/16 Javascript
JS实现仿UC浏览器前进后退效果的实例代码
2017/07/17 Javascript
Vue2.0实现组件数据的双向绑定问题
2018/03/06 Javascript
微信小程序canvas拖拽、截图组件功能
2018/09/04 Javascript
详解vue-router数据加载与缓存使用总结
2018/10/29 Javascript
微信小程序实现pdf、word等格式文件上传的方法
2019/09/10 Javascript
Python语言描述机器学习之Logistic回归算法
2017/12/21 Python
浅谈Python对内存的使用(深浅拷贝)
2018/01/17 Python
基于numpy.random.randn()与rand()的区别详解
2018/04/17 Python
关于Python形参打包与解包小技巧分享
2019/08/24 Python
python异常处理try except过程解析
2020/02/03 Python
python保留格式汇总各部门excel内容的实现思路
2020/06/01 Python
安装Anaconda3及使用Jupyter的方法
2020/10/27 Python
移动端Web页面的CSS3 flex布局快速上手指南
2016/05/31 HTML / CSS
使用CSS变量实现炫酷惊人的悬浮效果
2019/04/26 HTML / CSS
HTML5 3D旋转相册的实现示例
2019/12/03 HTML / CSS
加拿大知名的国际儿童品牌:Hatley
2016/11/09 全球购物
英国网上超市:Ocado
2020/03/05 全球购物
JoJo Maman Bébé爱尔兰官网:英国最受欢迎的精品母婴品牌
2020/12/20 全球购物
行政监察建议书
2014/05/19 职场文书
乡镇党的群众路线对照检查材料
2014/09/24 职场文书
小学运动会宣传稿
2015/07/23 职场文书
Mysql Innodb存储引擎之索引与算法
2022/02/15 MySQL