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网络编程学习笔记(四):域名系统
Jun 09 Python
在Python中使用zlib模块进行数据压缩的教程
Jun 26 Python
Python探索之创建二叉树
Oct 25 Python
python中hashlib模块用法示例
Oct 30 Python
python如何实现反向迭代
Mar 20 Python
python Pandas如何对数据集随机抽样
Jul 29 Python
Django接收post前端返回的json格式数据代码实现
Jul 31 Python
Django 实现xadmin后台菜单改为中文
Nov 15 Python
python 中的paramiko模块简介及安装过程
Feb 29 Python
在matplotlib中改变figure的布局和大小实例
Apr 23 Python
Python 生成短8位唯一id实战教程
Jan 13 Python
Python socket如何解析HTTP请求内容
Feb 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个人网站架设连环讲(三)
2006/10/09 PHP
PHP 简单数组排序实现代码
2009/08/05 PHP
php学习之function的用法
2012/07/14 PHP
3款值得推荐的微信开发开源框架
2014/10/28 PHP
php中addslashes函数与sql防注入
2014/11/17 PHP
详解在PHP的Yii框架中使用行为Behaviors的方法
2016/03/18 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
2016/03/23 PHP
php使用pecl方式安装扩展操作示例
2019/08/12 PHP
最近项目写了一些js,水平有待提高
2009/01/31 Javascript
Blocksit插件实现瀑布流数据无限( 异步)加载
2014/06/20 Javascript
JavaScript中的包装对象介绍
2015/01/27 Javascript
Jquery遍历Json数据的方法
2015/04/20 Javascript
微信扫码支付零云插件版实例详解
2017/04/26 Javascript
VueJs组件prop验证简单介绍
2017/09/12 Javascript
bootstrap table合并行数据并居中对齐效果
2018/10/17 Javascript
微信小程序实现带缩略图轮播效果
2018/11/04 Javascript
在vue-cli创建的项目中使用sass操作
2020/08/10 Javascript
Vue 事件的$event参数=事件的值案例
2021/01/29 Vue.js
python动态进度条的实现代码
2019/07/03 Python
python KNN算法实现鸢尾花数据集分类
2019/10/24 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
2019/11/26 Python
如何提高python 中for循环的效率
2020/04/15 Python
使用darknet框架的imagenet数据分类预训练操作
2020/07/07 Python
CSS3中31种选择器使用方法教程
2013/12/05 HTML / CSS
乌克兰香水和化妆品网站:Notino.ua
2018/03/26 全球购物
美国手机支架公司:PopSockets
2019/11/27 全球购物
请说出几个常用的异常类
2013/01/08 面试题
教师求职信范文分享
2013/12/27 职场文书
保安拾金不昧表扬信
2014/01/15 职场文书
工程招投标邀请书
2014/01/26 职场文书
趣味比赛活动方案
2014/02/15 职场文书
网络宣传方案
2014/03/15 职场文书
2014年作风建设心得体会
2014/10/22 职场文书
2015年初中元旦晚会活动总结
2014/11/28 职场文书
春节慰问简报
2015/07/21 职场文书
 python中的元类metaclass详情
2022/05/30 Python