今晚开始接触 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/1/23
# file_name: 3DTest
# github https://github.com/inspurer
# qq_mail 2391527690@qq.com # -*- coding: utf-8 -*-
"""
绘制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()

运行结果如下:

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

初探

旋转 3D 图形,

我发现无论是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个y向的间隔0.25.而把rstride = 1, cstride = 1去掉之后,我发现图形不变,说明1个距离是默认值。而且这两个参数只能是正整数,最小正整数就是1(默认值),所以为了图形的平滑,基本上我们不需要修改这个参数。

验证
修改参数,使 rstride = 4

其结果如下:

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

再修改参数,使 cstride 也 = 4

其结果如下:

可以看到无论是x向,还是y向,条纹数都变成了 8 ,同时由于间距变大,图形也比原来更粗糙了。
————————————————
原文链接:https://blog.csdn.net/ygdxt/article/details/86618606

deep_learning_Function_ Matplotlib 3D 绘图函数 plot_surface 的 rstride 和 cstride 参数的更多相关文章

  1. 数据分析与展示——Matplotlib基础绘图函数示例

    Matplotlib库入门 Matplotlib基础绘图函数示例 pyplot基础图表函数概述 函数 说明 plt.plot(x,y,fmt, ...) 绘制一个坐标图 plt.boxplot(dat ...

  2. Python3 matplotlib的绘图函数subplot()简介

    Python3 matplotlib的绘图函数subplot()简介 一.简介 matplotlib下, 一个 Figure 对象可以包含多个子图(Axes), 可以使用 subplot() 快速绘制 ...

  3. 数据分析与展示---Matplotlib基本绘图函数

    一:基本绘图函数(这里介绍16个,还有许多其他的) 二:pyplot饼图plt.pie的绘制 三:pyplot直方图plt.hist的绘制 (一)修改第二个参数bins:代表直方图的个数,均分为多段, ...

  4. 第二周 数据分析之展示 Matplotlib基础绘图函数实例

    Pyplot基础图表函数 Pyplot饼图的绘制: Pyplot直方图的绘制: Pyplot极坐标图的绘制: Pyplot散点图的绘制: 单元小结: import numpy as np import ...

  5. matplotlib plot 绘图函数发生阻塞(block)时的解决方法

    Is there a way to detach matplotlib plots so that the computation can continue? 在一般编辑器中: from matplo ...

  6. Python——matplotlib基础绘图函数示例

    1. 2.饼图 (1) import matplotlib.pyplot as plt labels='frogs','hogs','dogs','logs'% sizes=[15,30,45,10] ...

  7. 科学计算三维可视化---Mlab基础(基于Numpy数组的绘图函数)

    Mlab了解 Mlab是Mayavi提供的面向脚本的api,他可以实现快速的三维可视化,Mayavi可以通过Mlab的绘图函数对Numpy数组建立可视化. 过程为: .建立数据源 .使用Filter( ...

  8. 1.4 Matplotlib:绘图

    sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campai ...

  9. 如何用Matplotlib绘制三元函数

    #!/usr/bin/env python #coding=GBK from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm ...

随机推荐

  1. Linux0.11学习

    Linux 0.11虽然不是什么“珠穆朗玛峰”,但它肯定还是“华山”或“泰山”.虽然有路但你还是需要最基本的努力和花费一定的代价才能“攀登”上去.1. PC兼容机硬件工作原理(比如8259A,8253 ...

  2. 直连路由onlink

    根据路由器学习路由信息.生成并维护路由表的方法包括直连路由(Direct).静态路由(Static)和动态路由(Dynamic).直连路由:路由器接口所连接的子网的路由方式称为直连路由:非直连路由:通 ...

  3. CRM总结大纲

    目录 一. CRM客户关系管理系统 1. CRM是什么? 里面都有哪些功能(业务)? 2. 什么是公户?什么是私户?为什么要做这个区分? 3. 请列举出CRM系统中的表 4. 通过ORM操作对数据库的 ...

  4. 网站后台扫描工具dirbuster、御剑的用法

    dirbuster DirBuster是Owasp(Open Web Application Security Project )开发的一款专门用于探测网站目录和文件(包括隐藏文件)的工具.由于使用J ...

  5. 【DSP开发】DSP程序优化

    此文是在http://blog.csdn.net/guanchanghui/article/details/1181851基础上,通过自己的学习理解修改而来.暂且算作是自己的原创吧.如有侵权,联系,立 ...

  6. [转帖]兆芯发布国产X86处理器KX-6000和KH-30000,性能提升达50%,附详情介绍

    兆芯发布国产X86处理器KX-6000和KH-30000,性能提升达50%,附详情介绍 2019-06-20 09:56:38作者:linux人稿源:快科技 https://ywnz.com/linu ...

  7. 【转】redis数据库入门教程(全面详细)+面试问题

    [本教程目录] 1.redis是什么2.redis的作者何许人也3.谁在使用redis4.学会安装redis5.学会启动redis6.使用redis客户端7.redis数据结构 – 简介8.redis ...

  8. Java更新Oracle的clob类型字段

    Java更新Oracle的clob类型字段 1.查询该clob字段 2.处理该clob字段查询结果 3.更新该clob字段查询结果 1.查询该clob字段 <select id="se ...

  9. vm下centos7 mini版 NAT模式下配置静态IP

    1.查看虚拟机的默认网关和子网掩码 a.vm菜单栏点击编辑->虚拟网络编辑器 b.选择VMnet8,点击NAT设置,查看子网掩码.网关IP                2. 修改服务器的网络配 ...

  10. PAT A1042 Shuffling Machine

    自己思路,没通过 #include <cstdio> #define N 54 int main() { #ifdef ONLINE_JUDGE #else freopen("1 ...