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实现一个简单的多线程TCP服务器的教程
May 05 Python
Python线程详解
Jun 24 Python
详解Python中的序列化与反序列化的使用
Jun 30 Python
使用Python多线程爬虫爬取电影天堂资源
Sep 23 Python
python的staticmethod与classmethod实现实例代码
Feb 11 Python
Python subprocess模块常见用法分析
Jun 12 Python
使用Python AIML搭建聊天机器人的方法示例
Jul 09 Python
Python对象中__del__方法起作用的条件详解
Nov 01 Python
华为校园招聘上机笔试题 扑克牌大小(python)
Apr 22 Python
python中tab键是什么意思
Jun 18 Python
django表单中的按钮获取数据的实例分析
Jul 31 Python
深度学习tensorflow基础mnist
Apr 14 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编程中字符串处理的5个技巧小结
2007/11/13 PHP
Yii 使用intervention/image拓展实现图像处理功能
2019/06/22 PHP
thinkPHP和onethink微信支付插件分享
2019/08/11 PHP
Jquery实现带动画效果的经典二级导航菜单
2013/03/22 Javascript
利用JQuery制作符合Web标准的QQ弹出消息
2014/01/14 Javascript
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
微信JS接口汇总及使用详解
2015/01/09 Javascript
jquery实用技巧之输入框提示语句
2016/07/28 Javascript
js判断出两个字符串最大子串的函数实现方法
2016/11/01 Javascript
深入理解node.js之path模块
2017/05/03 Javascript
基于JavaScript实现数码时钟效果
2020/03/30 Javascript
利用纯JS实现像素逐渐显示的方法示例
2017/08/14 Javascript
koa+mongoose实现简单增删改查接口的示例代码
2019/05/13 Javascript
JS数组方法join()用法实例分析
2020/01/18 Javascript
微信小程序分享小程序码的生成(带参数)以及参数的获取
2020/03/25 Javascript
小程序实现左滑删除的效果的实例代码
2020/10/19 Javascript
python批量生成本地ip地址的方法
2015/03/23 Python
全面了解Python的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
Pycharm编辑器技巧之自动导入模块详解
2017/07/18 Python
python实现发送邮件功能代码
2017/12/14 Python
Python 装饰器实现DRY(不重复代码)原则
2018/03/05 Python
Python 3.7新功能之dataclass装饰器详解
2018/04/21 Python
对python中的six.moves模块的下载函数urlretrieve详解
2018/12/19 Python
在python中对变量判断是否为None的三种方法总结
2019/01/23 Python
Python批量生成特定尺寸图片及图画任意文字的实例
2019/01/30 Python
Python判断对象是否相等及eq函数的讲解
2019/02/25 Python
一文秒懂python读写csv xml json文件各种骚操作
2019/07/04 Python
Python 转换文本编码实现解析
2019/08/27 Python
详解python中的模块及包导入
2019/08/30 Python
jupyter note 实现将数据保存为word
2020/04/14 Python
python 使用raw socket进行TCP SYN扫描实例
2020/05/05 Python
管辖权异议上诉状
2015/05/23 职场文书
新郎父亲婚礼致辞
2015/07/27 职场文书
2021-4-3课程——SQL Server查询【2】
2021/04/05 SQL Server
python中数组和列表的简单实例
2022/03/25 Python
win10双系统怎么删除一个系统?win10电脑有两个系统删除一个的操作方法
2022/07/15 数码科技