• deep_learning_Function_ Matplotlib 3D 绘图函数 plot_surface 的 rstride 和 cstride 参数


    今晚开始接触 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

  • 相关阅读:
    记录贝叶斯深度学习
    tensorflow2.0 新特性 + kaggle练习
    Caffe学习记录(十三) OCNet分割网络学习
    Caffe学习记录(十二) ICNet分割网络学习二
    Caffe学习记录(十一) ICNet分割网络学习
    Caffe学习记录(十) SegNet等分割网络学习
    关于完美拖拽的问题三
    关于完美拖拽的问题二
    关于完美拖拽的问题一
    无限下拉实现原理
  • 原文地址:https://www.cnblogs.com/0405mxh/p/11655440.html
Copyright © 2020-2023  润新知