python matplotlib绘制 3D图像专题 (三维柱状图、曲面图、散点图、曲线图合集)

python matplotlib 绘制3D图表

文章目录

  • 1. 绘制3D柱状图
  • 2. 绘制3D曲面图
  • ① 示例1
  • ② 示例2
  • 3.绘制3D散点图
  • 4. 绘制3D曲线图

  •       ʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞ
                     请添加图片描述请添加图片描述请添加图片描述
        ʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞ


    大家好,我是侯小啾!
    今天分享的内容是,如何使用python matplotlib绘制绘制出一系列酷炫的3D图像。基础的部分我在该系列的其他的blog中已经有所涉及,这里就主要通过代码示例快速传达有效信息啦。


    1. 绘制3D柱状图

    绘制3D柱状图使用的是axes3d.bar()方法。
    可能跟我们中学学的有一点不同的是,其语法如下:

    bar(left, height, zs=0, zdir=‘z’, *args, **kwargs)

    其中left表示指向侧边的轴,zs表示指向我们的方向的轴,height即表示高度的轴。这三者都需要是一维的序列对象。
    在调用相关方法的时候,比如设置轴标签,还有一点需要区分的是,left对应的是y轴,zs对应的是x轴。(意思就是说,比如使用plt.xticks()方法,操作的是zs;而使用plt.yticks()方法则操作的是left轴。height对应着z轴。)

    一段完整的代码示例如下:

    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d.axes3d import Axes3D
    import numpy as np
    plt.rcParams['axes.unicode_minus'] = False
    plt.rcParams['axes.facecolor'] = '#cc00ff'
    plt.rcParams['font.sans-serif'] = ['STKAITI']
    # 创建画布
    fig = plt.figure()
    # 创建3D坐标系
    axes3d = Axes3D(fig)
    zs = range(5)
    left = np.arange(0, 10)
    height = np.array([])
    for i in range(len(zs)):
        z = zs[i]
        np.random.seed(i)
        height = np.random.randint(0, 30, size=10)
        axes3d.bar(left, height, zs=z, zdir='x',
                   color=['red', 'green', 'purple', 'yellow', 'blue', 'black', 'gray', 'orange', 'pink', 'cyan'])
    plt.xticks(zs, ['1月份', '2月份', '3月份', '4月份', '5月份'])
    plt.yticks(left, ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'G'])
    plt.xlabel('月份')
    plt.ylabel('型号')
    plt.show()
    

    图像效果如下:


    2. 绘制3D曲面图

    ① 示例1

    绘制曲面图使用的是plot_surface()方法,这个方法的参数相对而言更简单。且X、Y、Z三者的顺序相对较为容易分辨。

    通过读示例代码,即可快速掌握其用法:

    import matplotlib.pyplot as plt
    import numpy as np
    from mpl_toolkits.mplot3d import Axes3D
    plt.rcParams['font.sans-serif'] = ['STKAITI']
    plt.rcParams['axes.unicode_minus'] = False
    plt.rcParams['axes.facecolor'] = '#cc00ff'
    fig = plt.figure(figsize=(10, 8), facecolor='#cc00ff')
    ax = Axes3D(fig)
    delta = 0.125
    # 生成代表X轴数据的列表
    x = np.arange(-4.0, 4.0, delta)
    # 生成代表Y轴数据的列表
    y = np.arange(-3.0, 4.0, delta)
    # 对x、y数据执行网格化
    X, Y = np.meshgrid(x, y)
    
    Z1 = np.exp(-X**2 - Y**2)
    Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)
    # 计算Z轴数据(高度数据)
    Z = (Z1 - Z2) * 2
    # 绘制3D图形
    ax.plot_surface(X, Y, Z,
        rstride=1,  # rstride(row)指定行的跨度
        cstride=1,  # cstride(column)指定列的跨度
        cmap=plt.get_cmap('rainbow'))  # 设置颜色映射
    plt.xlabel('X轴', fontsize=15)
    plt.ylabel('Y轴', fontsize=15)
    ax.set_zlabel('Z轴', fontsize=15)
    ax.set_title('《曲面图》', y=1.02, fontsize=25, color='gold')
    # 设置Z轴范围
    ax.set_zlim(-2, 2)
    plt.show()
    


    ② 示例2

    更换一组数据,呈现的则是另一种艺术效果:

    import matplotlib.pyplot as plt
    import numpy as np
    from mpl_toolkits.mplot3d import Axes3D
    plt.rcParams['font.sans-serif'] = ['STKAITI']
    plt.rcParams['axes.unicode_minus'] = False
    plt.rcParams['axes.facecolor'] = '#cc00ff'
    fig = plt.figure(figsize=(12, 10), facecolor='#cc00ff')
    ax = Axes3D(fig)
    delta = 0.125
    # 生成代表X轴数据的列表
    x = np.linspace(-2, 2, 10)
    # 生成代表Y轴数据的列表
    y = np.linspace(-2, 2, 10)
    # 对x、y数据执行网格化
    X, Y = np.meshgrid(x, y)
    
    # 计算Z轴数据(高度数据)
    Z = X**2 - Y**2
    # 绘制3D图形
    ax.plot_surface(X, Y, Z,
        rstride=1,  # rstride(row)指定行的跨度
        cstride=1,  # cstride(column)指定列的跨度
        cmap=plt.get_cmap('rainbow'))  # 设置颜色映射
    plt.xlabel('X轴', fontsize=15)
    plt.ylabel('Y轴', fontsize=15)
    ax.set_zlabel('Z轴', fontsize=15)
    ax.set_title('《曲面图》', y=1.02, fontsize=25, color='gold')
    plt.show()
    


    3.绘制3D散点图

    在3D曲面图示例1的基础上稍作修改。
    绘制散点图使用scatter()方法,将散点颜色设置为绿色,红色边沿。

    代码示例如下:

    import matplotlib.pyplot as plt
    import numpy as np
    from mpl_toolkits.mplot3d import Axes3D
    plt.rcParams['font.sans-serif'] = ['STKAITI']
    plt.rcParams['axes.unicode_minus'] = False
    plt.rcParams['axes.facecolor'] = '#cc00ff'
    fig = plt.figure(figsize=(10, 8), facecolor='#cc00ff')
    ax = Axes3D(fig)
    delta = 0.125
    # 生成代表X轴数据的列表
    x = np.arange(-4.0, 4.0, delta)
    # 生成代表Y轴数据的列表
    y = np.arange(-3.0, 4.0, delta)
    # 对x、y数据执行网格化
    X, Y = np.meshgrid(x, y)
    
    Z1 = np.exp(-X**2 - Y**2)
    Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)
    # 计算Z轴数据(高度数据)
    Z = (Z1 - Z2) * 2
    # 绘制3D图形
    ax.scatter(X, Y, Z,
               c='green',
               edgecolors='red')
    plt.xlabel('X轴', fontsize=15)
    plt.ylabel('Y轴', fontsize=15)
    ax.set_zlabel('Z轴', fontsize=15)
    ax.set_title('《散点图》', y=1.02, fontsize=25, color='gold')
    # 设置Z轴范围
    ax.set_zlim(-2, 2)
    plt.show()
    

    绘图效果如下:


    4. 绘制3D曲线图

    绘制曲线图,使用的则是我们最最最熟悉的plot()方法。

    其他部分基本不变,数据部分生成三组适合我们绘图的数据,线条为金色,宽度设定为3.

    代码如下:

    import matplotlib.pyplot as plt
    import numpy as np
    from mpl_toolkits.mplot3d import Axes3D
    plt.rcParams['font.sans-serif'] = ['STKAITI']
    plt.rcParams['axes.unicode_minus'] = False
    plt.rcParams['axes.facecolor'] = '#cc00ff'
    fig = plt.figure(figsize=(10, 8), facecolor='#cc00ff')
    ax = Axes3D(fig)
    theta = np.linspace(0, 3.14*10, 1000)
    r = np.linspace(0, 1, 1000)
    x = r * np.cos(theta)
    y = r * np.sin(theta)
    z = np.linspace(0, 4, 1000)
    ax.plot(x, y, z, color='gold', lw=3)
    plt.xlabel('X轴', fontsize=15)
    plt.ylabel('Y轴', fontsize=15)
    ax.set_zlabel('Z轴', fontsize=15)
    ax.set_title('《曲线图》', y=1.02, fontsize=25, color='gold')
    plt.show()
    

    图像效果如下:


    本次分享就到这里,小啾感谢您的关注与支持!
    🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ

    来源:侯小啾

    物联沃分享整理
    物联沃-IOTWORD物联网 » python matplotlib绘制 3D图像专题 (三维柱状图、曲面图、散点图、曲线图合集)

    发表评论