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中无限元素列表的实现方法
Aug 18 Python
Python操作MySQL简单实现方法
Jan 26 Python
Python简单遍历字典及删除元素的方法
Sep 18 Python
在pycharm中python切换解释器失败的解决方法
Oct 29 Python
对Pandas DataFrame缺失值的查找与填充示例讲解
Nov 06 Python
Django 项目重命名的实现步骤解析
Aug 14 Python
python将时分秒转换成秒的实例
Dec 07 Python
pytorch构建多模型实例
Jan 15 Python
python实现百度OCR图片识别过程解析
Jan 17 Python
keras中模型训练class_weight,sample_weight区别说明
May 23 Python
浅析Python 责任链设计模式
Sep 11 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 之Section与Cookie使用总结
2012/09/14 PHP
学习php设计模式 php实现原型模式(prototype)
2015/12/07 PHP
ThinkPHP使用Ueditor的方法详解
2016/05/20 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
2017/04/04 PHP
php实现微信企业付款到个人零钱功能
2018/10/09 PHP
laravel 去掉index.php伪静态的操作方法
2019/10/12 PHP
Laravel实现通过blade模板引擎渲染视图
2019/10/25 PHP
js同时按下两个方向键
2007/12/01 Javascript
Prototype源码浅析 String部分(一)之有关indexOf优化
2012/01/15 Javascript
从JQuery源码分析JavaScript函数的apply方法与call方法
2014/09/25 Javascript
javascript实现五星评分功能
2015/11/10 Javascript
JavaScript实现自动跳转文本功能
2017/05/25 Javascript
H5实现仿flash效果的实现代码
2017/09/29 Javascript
vue 组件中添加样式不生效的解决方法
2018/07/06 Javascript
ZK中使用JS读取客户端txt文件内容问题
2019/11/07 Javascript
javascript实现拖拽碰撞检测
2020/03/12 Javascript
详解ES6 扩展运算符的使用与注意事项
2020/11/12 Javascript
vue实现广告栏上下滚动效果
2020/11/26 Vue.js
vue监听键盘事件的相关总结
2021/01/29 Vue.js
在Python中测试访问同一数据的竞争条件的方法
2015/04/23 Python
Python tkinter模块弹出窗口及传值回到主窗口操作详解
2017/07/28 Python
python使用邻接矩阵构造图代码示例
2017/11/10 Python
Python基础教程之异常详解
2019/01/10 Python
如何在Cloud Studio上执行Python代码?
2019/08/09 Python
简单介绍一下pyinstaller打包以及安全性的实现
2020/06/02 Python
尤妮佳moony海外旗舰店:日本殿堂级纸尿裤品牌
2018/02/23 全球购物
Carolina工作鞋官网:Carolina Footwear
2019/03/14 全球购物
用C或者C++语言实现SOCKET通信
2015/02/24 面试题
机械专业毕业生自荐信
2013/11/02 职场文书
消防应急演练方案
2014/02/12 职场文书
机械制造毕业生求职信
2014/03/03 职场文书
长城英文导游词
2015/01/30 职场文书
2015年班组工作总结
2015/04/20 职场文书
朝花夕拾读书笔记
2015/06/29 职场文书
使用Redis做预定库存缓存功能
2022/04/02 Redis
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android