温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何深入理解Matplotlib3D 绘图函数plot_surface

发布时间:2021-12-08 17:54:15 阅读:263 作者:柒染 栏目:大数据
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

这篇文章给大家介绍如何深入理解Matplotlib3D 绘图函数plot_surface,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

今晚开始接触 Matplotlib 的 3D 绘图函数 plot_surface,真的非常强大,图片质量可以达到出版级别,而且 3D 图像可以旋转 ,可以从不同角度来看某个 3D 立体图,但是我发现各大中文开源社区有关 3D 绘图的代码都是千篇一律的,现除了看源码说明,我几乎得不到半点有关 plot_surface 的重要参数说明,而且我感觉纯英文的源码说明晦涩难懂,而且没有任何配图,初学者看得是云里雾里,经过一晚上的调试,我才完全弄明白所有参数的含义,以及如何改变这些参数控制图形的显示,现将一点心得分享出来

Talk is cheap, show the code

# -*- coding: utf-8 -*-# author:           inspurer(月小水长)# pc_type           lenovo# create_date:      2019/5/25# file_name:        3DTest# github            https://github.com/inspurer# 微信公众号         月小水长(ID: inspurer)"""绘制3d图形"""import matplotlib.pyplot as pltimport numpy as npfrom mpl_toolkits.mplot3d import Axes3D# 定义figurefig = plt.figure()# 创建3d图形的两种方式# 将figure变为3dax = Axes3D(fig)#ax = fig.add_subplot(111, projection='3d')# 定义x, yx = np.arange(-440.25)y = np.arange(-440.25)# 生成网格数据X, Y = np.meshgrid(x, y)# 计算每个点对的长度R = np.sqrt(X ** 2 + Y ** 2)# 计算Z轴的高度Z = np.sin(R)# 绘制3D曲面# rstride:行之间的跨度  cstride:列之间的跨度# rcount:设置间隔个数,默认50个,ccount:列的间隔个数  不能与上面两个参数同时出现# cmap是颜色映射表# from matplotlib import cm# ax.plot_surface(X, Y, Z, rstride = 1, cstride = 1, cmap = cm.coolwarm)# cmap = "rainbow" 亦可# 我的理解的 改变cmap参数可以控制三维曲面的颜色组合, 一般我们见到的三维曲面就是 rainbow 的# 你也可以修改 rainbow 为 coolwarm, 验证我的结论ax.plot_surface(X, Y, Z, rstride = 1, cstride = 1, cmap = plt.get_cmap('rainbow'))# 绘制从3D曲面到底部的投影,zdir 可选 'z'|'x'|'y'| 分别表示投影到z,x,y平面# zdir = 'z', offset = -2 表示投影到z = -2上ax.contour(X, Y, Z, zdir = 'z', offset = -2, cmap = plt.get_cmap('rainbow'))# 设置z轴的维度,x,y类似ax.set_zlim(-22)plt.show()
 

运行结果如下:

如何深入理解Matplotlib3D 绘图函数plot_surface

1

其中大部分的参数说明我已经在注释了,应该很容易理解,其中的 rstride (row stride)和 cstride (column stride) (stride是步长的意思,row : 行,column : 列)参数也有了初步的介绍,下面重点讨论如何理解他们。

初探

旋转 3D 图形


 

如何深入理解Matplotlib3D 绘图函数plot_surface


 
2

我发现无论是 x 向,还是 y 向,条纹数都是 32
而这刚好是我们 x = np.arange(-4, 4, 0.25)中[4-(-4)]/0.25 = 32
ax.plot_surface(X, Y, Z, rstride = 1, cstride = 1, cmap = plt.get_cmap('rainbow'))中 rstride = 1, cstride = 1,r(row)对应 x向,c(column)对应 y 向,rstride = 1 说明在 x 向的条纹间隔为 1 个 x 向单位长度(也就是 0.25),cstride = 1 说明在y向的条纹间隔为 1 个 x 向单位长度(也是 0.25)。而把rstride = 1, cstride = 1去掉之后,我发现图形不变,说明 1 个距离是默认值。而且这两个参数只能是正整数,最小正整数就是 1(默认值),所以为了图形的平滑,基本上我们不需要修改这个参数。

验证

 

修改参数,使 rstride = 4

其结果如下:

如何深入理解Matplotlib3D 绘图函数plot_surface

3

32 / 4 = 8,x向的条纹数变成了 8 ,这符合我们的预期,看来我们得推测是正确的。

 

修改参数,同时使 rstride 和 cstride  = 4

其结果如下:

如何深入理解Matplotlib3D 绘图函数plot_surface

4

可以看到无论是 x 向,还是 y 向,条纹数都变成了 8 ,同时由于间距变大,图形也比原来更粗糙了。

这再一次验证了我们的推测是正确的!

关于如何深入理解Matplotlib3D 绘图函数plot_surface就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

原文链接:https://my.oschina.net/u/3225759/blog/4373938

AI

开发者交流群×