zoukankan      html  css  js  c++  java
  • python 用 matplotlib 在 3D 空间中连点成线,绘制立体图形

    图形预览:

      

    0、import

    import matplotlib as mpl
    from matplotlib import cm
    from matplotlib import pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D

    1、简单的连点成线

    # 创建画布
    fig = plt.figure(figsize=(12, 8),
                     facecolor='lightyellow'
                    )
    
    # 创建 3D 坐标系
    ax = fig.gca(fc='whitesmoke',
                   projection='3d' 
                  )
    
    
    # 绘制 3D 图形
    
    ax.plot3D(xs=[2, 0, 2, 2, 2, 0, 2],    # x 轴坐标
              ys=[0, 2, 2, 0, 2, 2, 2],    # y 轴坐标
              zs=[2, 2, 2, 2, 0, 2, 2],    # z 轴坐标
              zdir='z',    # 
              c='k',    # color
              marker='o',    # 标记点符号
              mfc='r',    # marker facecolor
              mec='g',    # marker edgecolor
              ms=10,    # size
            )
    
    
    ax.plot(xs=[2, 0, 0, 0, 1, 2, 0, 1, 2],
            ys=[0, 0, 2, 0, 1, 2, 0, 1, 2],
            zs=[2, 0, 2, 0, 1, 2, 0, 0, 0],
            ls=':',
            color='grey',
            marker='o',
            mfc='r',
            mec='g'
           )
    
    
    
    # 设置坐标轴标题和刻度
    ax.set(xlabel='X',
           ylabel='Y',
           zlabel='Z',
           xticks=np.arange(0, 4, 0.5),
           yticks=np.arange(0, 4, 0.5),
           zticks=np.arange(0, 4, 0.5)
          )
    
    # 调整视角
    ax.view_init(elev=20,    # 仰角
                 azim=40    # 方位角
                )
              
    # 显示图形
    plt.show()

    图形:

     

    2、立方体

    # 创建画布
    fig = plt.figure(figsize=(12, 8),
                     facecolor='lightyellow'
                    )
    
    # 创建 3D 坐标系
    ax = fig.gca(fc='whitesmoke',
                   projection='3d' 
                  )
    
    x = [7, 7, 7, 7, 3, 3, 3, 3]
    y = [3, 7, 7, 3, 3, 7, 7, 3]
    z = [7, 7, 3, 3, 7, 7, 3, 3]
    A, B, C, D, E, F, G, H = zip(x, y, z)
    
    # 绘制 3D 图形
    lines_1 = zip(A, B, C, D, A, E, F, G, C, B, F)
    ax.plot3D(*lines_1,
              zdir='z',    # 
              c='k',    # color
              marker='o',    # 标记点符号
              mfc='r',    # marker facecolor
              mec='g',    # marker edgecolor
              ms=10,    # size
            )
    
    lines_2 = zip(D, H, E, G, H)
    ax.plot(*lines_2,
            ls=':',
            color='b',
            marker='o',
            mfc='r',
            mec='g'
           )
    
    
    # 设置坐标轴标题和刻度
    ax.set(xlabel='X',
           ylabel='Y',
           zlabel='Z',
           xlim=(0, 9),
           ylim=(0, 9),
           zlim=(0, 9),
           xticks=np.arange(0, 10, 2),
           yticks=np.arange(0, 10, 1),
           zticks=np.arange(0, 10, 1)
          )
    
    # 添加顶点字母标注
    for pos in list('abcdefgh'.upper()):
        ax.text(*eval(pos),
               s=pos,
               fontsize=18,
               color='darkgreen')
    
    # 调整网格线
    ax.grid() 
    
    # 调整视角
    ax.view_init(elev=15,    # 仰角
                 azim=40   # 方位角
                )
         
    # 显示图形
    plt.show()

    图形:

     软件信息:

     

  • 相关阅读:
    Fidder4 顶部提示 “The system proxy was changed,click to reenable fiddler capture”。
    redis 哨兵 sentinel master slave 连接建立过程
    虚拟点赞浏览功能的大数据量测试
    python基础练习题(题目 字母识词)
    python基础练习题(题目 回文数)
    python基础练习题(题目 递归求等差数列)
    python基础练习题(题目 递归输出)
    python基础练习题(题目 递归求阶乘)
    python基础练习题(题目 阶乘求和)
    python基础练习题(题目 斐波那契数列II)
  • 原文地址:https://www.cnblogs.com/shanger/p/13199793.html
Copyright © 2011-2022 走看看