这是我参与11月更文挑战的第19天,活动详情查看:2021最后一次更文挑战
前言
在matplotlib模块最初的时候只支持绘制2D图形,例如我们之前也学习过绘制折线图、柱状图、直方图等统计图表,同时也学习绘制多个子图、常见图形等。如下例举往期文章,可供参考
- matplotlib 底层结构:matplotlib模块分为脚本层、美工层和后端,协同工作流程的学习
- matplotlib 绘制折线图:pyplot.plot()绘制折线图相关属性进行汇总说明
- matplotlib 绘制柱状图:pyplot.bar()绘制绍柱状图相关属性进行汇总说明
- matplotlib 绘制直方图:pyolot.hist()绘制直方图相关属性进行汇总说明
- matplotlib 绘制图形:对常见的矩形、圆形等图形绘制方法介绍
随着技术发展,matplotlib模块在2D绘制的基础,封装出实用的3D绘制工具包mplot3d来支持我们更快地绘制3D图形。
本期,我们将详细学习3D绘制模块mplot3d相关绘制方法,Let’s go~
mplot3d库是matplotlib模块中专门针对绘制3D图像所提供的2D投影的Axes对象,为Matplotlib 增加了可以绘制散点图、曲面图、折线图、网格等。
- mplot3d 特点
+ mplot3d 允许用户创建matplotlib 2D绘图的简单3D图形
+ mplot3d 方法易上手,直接可以使用2D方法进行绘制
+ mplot3d 绘制3D图像与2D图像共用同的渲染引擎,可能会出现Z轴投影出现偏差
+ mplot3d 样式可以通过更改参数来进行个性化修改
- mplot3d 使用
我们在使用mplot3d工具包时,需要额外使用from…import来导入Axes3D类
1 | python复制代码from mpl_toolkits.mplot3d import Axes3D |
PS:
- pyplot类无法进行3D绘图添加内容、处理3D附加信息等,必须要使用Axes3D对象来进行创建
- mplot3d 绘制3D图形方法还不太成熟,对于复杂的3D图场景,建议使用Mayavi
在 matplotlib 模块中提供绘制3D图形需要mplot3d中Axes3D对象与pyplot方法结合使用,因此绘制3D图形有如下步骤
- 导入matplotlib.pyplot和mpl_toolkits.mplot3d中Axes3D类
1 | python复制代码import matplotlib.pyplot as plt |
- 使用Pyplot.figure创建一个fig画布对象
1 | python复制代码fig = plt.figure() |
- 在fig画布中创建一个带3D坐标的Axes对象
+ 方式一:使用创建子图通过projection='3D'来创建
1 | python复制代码ax = fig.add_subplot(projection='3d') |
+ 方式二:调用Axes3D类来创建对象
1 | python复制代码ax = Axes3D(fig) |
- 调用numpy.random或者numpy.arange()等方法准备x,y轴数据
1 | python复制代码x = np.arange(-5,5,0.25) |
- 调用numpy.meshgrid()方法对x,y进行映射矩阵
1 | python复制代码x,y = np.meshgrid(x,y) |
- 根据x,y矩阵数据按需求进行计算求出Z轴数据,例如调用numpy.sin()、cos()函数
1 | python复制代码R = np.sqrt(x**2+y**2) |
- Axes对象调用pyplot绘制图表、图形的方法绘制,例如调用等高线图contour、曲面plot_surface()
1 | python复制代码ax.plot_surface(x,y,z,rstride=1,cstride=1,alpha=0.5,cmap=cm.coolwarm) |
- Axes对象调用xlim,ylim,zlim方法设置x,y,z轴取值范围
1 | python复制代码ax.set_zlim(-2,2) |
- 最后调用pyplot.show()展示出绘制的图像
1 | python复制代码plt.show() |
- 展示的效果如图
- 使用numpy.arange()|numpy.random.randint()准备x,y,z轴的数据
- Axes对象调用scatter散点图方法绘制散点图
1 | python复制代码x = np.arange(0,200) |
- 使用np.linspace()和np.sin()对x,y轴数据准备
- Axes对象调用plot()折线方法绘制折线图
1 | python复制代码x = np.linspace(0,1,100) |
1 | python复制代码for z in range(0,3): |
总结
本期,对matplotlib 模块提供mplot3d库绘制3D图形的步骤进行学习,同时手动实操散点图、折线、柱状图3D图。
对于,绘制3D图形必现要使用Axes3D对象进行绘制,对于复杂的3D图形matplotlib渲染引擎渲染比较差,官方建议使用Mayavi进行处理。
以上是本期内容,欢迎大佬们点赞评论,下期见~
本文转载自: 掘金