我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

这篇文章给大家介绍如何深入理解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 plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
# 定义figure
fig = plt.figure()
# 创建3d图形的两种方式
# 将figure变为3d
ax = Axes3D(fig)

#ax = fig.add_subplot(111, projection='3d')

# 定义x, y
x = np.arange(-4, 4, 0.25)
y = np.arange(-4, 4, 0.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(-2, 2)

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就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

这篇文章给大家介绍如何深入理解Matplotlib3D 绘图函数plot_surface,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。今晚开始接触 Matplotlib 的 3D 绘图函数 plot_surface,真
2023-06-20

C++ 函数调试详解:如何深入了解函数的执行过程?

c++++ 函数调试的关键技能包括:1. 设置断点以暂停执行;2. 单步执行逐行查看代码;3. 检查变量监视值;4. 打印调试信息查看特定状态。通过实战案例,可以深入了解函数执行过程,快速找出并修复错误。C++ 函数调试详解:深入函数执行过
C++ 函数调试详解:如何深入了解函数的执行过程?
2024-05-03

深入了解Linux exit函数如何关闭文件描述符

在 Linux 系统中,当一个进程调用 exit 函数时,它会执行一系列操作来正常终止关闭所有打开的文件描述符:exit 函数首先会关闭进程中所有仍然打开的文件描述符。这是通过遍历进程的文件描述符表并对每个打开的文件描述符执行 close
深入了解Linux exit函数如何关闭文件描述符
2024-09-09

如何深入理解关系型数据库的三大范式

该文章,GitHub已收录,欢迎老板们前来Star!GitHub地址: https://github.com/Ziphtracks/JavaLearningmanual数据库范式一、什么是数据库范式 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数
如何深入理解关系型数据库的三大范式
2018-01-24

如何理解Python嵌入较低层次中的常用两种函数

这期内容当中小编将会给大家带来有关如何理解Python嵌入较低层次中的常用两种函数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。如果需要在C程序中用Python脚本传递参数,或者获得Python脚本的返回
2023-06-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录