• 用matplotlib绘制3D图形


    用matplotlib绘制3D图形

    制备

    • 导入numpy进行数据处理,导入pyplot进行绘图,以及mpl_toolkits.mplot3d,因为它是3D的。

    1 # 导包
    2 from mpl_toolkits.mplot3d import Axes3D
    3 import matplotlib.pyplot as plt
    4 import numpy as np

    创建要绘制的数据

    • 要绘制3D,需要准备2D数组以创建网格(2D网格)。

    • 首先,使用range方法将x和y分别划分为一维区域。

    x = np.arange(-3,3,0.25)
    y = np.arange(-3,3,0.25)
    • 使用meshgrid方法创建二维网格。该函数的返回值是对应于X和Y的矩阵,其中X是行中x的数组,Y是列中y的数组。

    1 X, Y = np.meshgrid(x,y)
    2 print("x=" ,x)
    3 print("X=" ,X)
    4 print("y=" ,y)
    5 print("Y=" ,Y)
    x= [-3.   -2.75 -2.5  -2.25 -2.   -1.75 -1.5  -1.25 -1.   -0.75 -0.5  -0.25
    0.   0.25 0.5   0.75 1.   1.25 1.5   1.75 2.   2.25 2.5   2.75]
    X= [[-3.   -2.75 -2.5 -2.25 -2.   -1.75 -1.5 -1.25 -1.   -0.75 -0.5 -0.25
      0.   0.25 0.5   0.75 1.   1.25 1.5   1.75 2.   2.25 2.5   2.75]
    [-3.   -2.75 -2.5 -2.25 -2.   -1.75 -1.5 -1.25 -1.   -0.75 -0.5 -0.25
      0.   0.25 0.5   0.75 1.   1.25 1.5   1.75 2.   2.25 2.5   2.75]
    [-3.   -2.75 -2.5 -2.25 -2.   -1.75 -1.5 -1.25 -1.   -0.75 -0.5 -0.25
      0.   0.25 0.5   0.75 1.   1.25 1.5   1.75 2.   2.25 2.5   2.75]
    [-3.   -2.75 -2.5 -2.25 -2.   -1.75 -1.5 -1.25 -1.   -0.75 -0.5 -0.25
      0.   0.25 0.5   0.75 1.   1.25 1.5   1.75 2.   2.25 2.5   2.75]
    [-3.   -2.75 -2.5 -2.25 -2.   -1.75 -1.5 -1.25 -1.   -0.75 -0.5 -0.25
      0.   0.25 0.5   0.75 1.   1.25 1.5   1.75 2.   2.25 2.5   2.75]
    [-3.   -2.75 -2.5 -2.25 -2.   -1.75 -1.5 -1.25 -1.   -0.75 -0.5 -0.25
      0.   0.25 0.5   0.75 1.   1.25 1.5   1.75 2.   2.25 2.5   2.75]
    [-3.   -2.75 -2.5 -2.25 -2.   -1.75 -1.5 -1.25 -1.   -0.75 -0.5 -0.25
      0.   0.25 0.5   0.75 1.   1.25 1.5   1.75 2.   2.25 2.5   2.75]
    [-3.   -2.75 -2.5 -2.25 -2.   -1.75 -1.5 -1.25 -1.   -0.75 -0.5 -0.25
      0.   0.25 0.5   0.75 1.   1.25 1.5   1.75 2.   2.25 2.5   2.75]
    [-3.   -2.75 -2.5 -2.25 -2.   -1.75 -1.5 -1.25 -1.   -0.75 -0.5 -0.25
      0.   0.25 0.5   0.75 1.   1.25 1.5   1.75 2.   2.25 2.5   2.75]
    [-3.   -2.75 -2.5 -2.25 -2.   -1.75 -1.5 -1.25 -1.   -0.75 -0.5 -0.25
      0.   0.25 0.5   0.75 1.   1.25 1.5   1.75 2.   2.25 2.5   2.75]
    [-3.   -2.75 -2.5 -2.25 -2.   -1.75 -1.5 -1.25 -1.   -0.75 -0.5 -0.25
      0.   0.25 0.5   0.75 1.   1.25 1.5   1.75 2.   2.25 2.5   2.75]
    [-3.   -2.75 -2.5 -2.25 -2.   -1.75 -1.5 -1.25 -1.   -0.75 -0.5 -0.25
      0.   0.25 0.5   0.75 1.   1.25 1.5   1.75 2.   2.25 2.5   2.75]
    [-3.   -2.75 -2.5 -2.25 -2.   -1.75 -1.5 -1.25 -1.   -0.75 -0.5 -0.25
      0.   0.25 0.5   0.75 1.   1.25 1.5   1.75 2.   2.25 2.5   2.75]
    [-3.   -2.75 -2.5 -2.25 -2.   -1.75 -1.5 -1.25 -1.   -0.75 -0.5 -0.25
      0.   0.25 0.5   0.75 1.   1.25 1.5   1.75 2.   2.25 2.5   2.75]
    [-3.   -2.75 -2.5 -2.25 -2.   -1.75 -1.5 -1.25 -1.   -0.75 -0.5 -0.25
      0.   0.25 0.5   0.75 1.   1.25 1.5   1.75 2.   2.25 2.5   2.75]
    [-3.   -2.75 -2.5 -2.25 -2.   -1.75 -1.5 -1.25 -1.   -0.75 -0.5 -0.25
      0.   0.25 0.5   0.75 1.   1.25 1.5   1.75 2.   2.25 2.5   2.75]
    [-3.   -2.75 -2.5 -2.25 -2.   -1.75 -1.5 -1.25 -1.   -0.75 -0.5 -0.25
      0.   0.25 0.5   0.75 1.   1.25 1.5   1.75 2.   2.25 2.5   2.75]
    [-3.   -2.75 -2.5 -2.25 -2.   -1.75 -1.5 -1.25 -1.   -0.75 -0.5 -0.25
      0.   0.25 0.5   0.75 1.   1.25 1.5   1.75 2.   2.25 2.5   2.75]
    [-3.   -2.75 -2.5 -2.25 -2.   -1.75 -1.5 -1.25 -1.   -0.75 -0.5 -0.25
      0.   0.25 0.5   0.75 1.   1.25 1.5   1.75 2.   2.25 2.5   2.75]
    [-3.   -2.75 -2.5 -2.25 -2.   -1.75 -1.5 -1.25 -1.   -0.75 -0.5 -0.25
      0.   0.25 0.5   0.75 1.   1.25 1.5   1.75 2.   2.25 2.5   2.75]
    [-3.   -2.75 -2.5 -2.25 -2.   -1.75 -1.5 -1.25 -1.   -0.75 -0.5 -0.25
      0.   0.25 0.5   0.75 1.   1.25 1.5   1.75 2.   2.25 2.5   2.75]
    [-3.   -2.75 -2.5 -2.25 -2.   -1.75 -1.5 -1.25 -1.   -0.75 -0.5 -0.25
      0.   0.25 0.5   0.75 1.   1.25 1.5   1.75 2.   2.25 2.5   2.75]
    [-3.   -2.75 -2.5 -2.25 -2.   -1.75 -1.5 -1.25 -1.   -0.75 -0.5 -0.25
      0.   0.25 0.5   0.75 1.   1.25 1.5   1.75 2.   2.25 2.5   2.75]
    [-3.   -2.75 -2.5 -2.25 -2.   -1.75 -1.5 -1.25 -1.   -0.75 -0.5 -0.25
      0.   0.25 0.5   0.75 1.   1.25 1.5   1.75 2.   2.25 2.5   2.75]]
    y= [-3.   -2.75 -2.5 -2.25 -2.   -1.75 -1.5 -1.25 -1.   -0.75 -0.5 -0.25
    0.   0.25 0.5   0.75 1.   1.25 1.5   1.75 2.   2.25 2.5   2.75]
    Y= [[-3.   -3.   -3.   -3.   -3.   -3.   -3.   -3.   -3.   -3.   -3.   -3.
    -3.   -3.   -3.   -3.   -3.   -3.   -3.   -3.   -3.   -3.   -3.   -3. ]
    [-2.75 -2.75 -2.75 -2.75 -2.75 -2.75 -2.75 -2.75 -2.75 -2.75 -2.75 -2.75
    -2.75 -2.75 -2.75 -2.75 -2.75 -2.75 -2.75 -2.75 -2.75 -2.75 -2.75 -2.75]
    [-2.5 -2.5 -2.5 -2.5 -2.5 -2.5 -2.5 -2.5 -2.5 -2.5 -2.5 -2.5
    -2.5 -2.5 -2.5 -2.5 -2.5 -2.5 -2.5 -2.5 -2.5 -2.5 -2.5 -2.5 ]
    [-2.25 -2.25 -2.25 -2.25 -2.25 -2.25 -2.25 -2.25 -2.25 -2.25 -2.25 -2.25
    -2.25 -2.25 -2.25 -2.25 -2.25 -2.25 -2.25 -2.25 -2.25 -2.25 -2.25 -2.25]
    [-2.   -2.   -2.   -2.   -2.   -2.   -2.   -2.   -2.   -2.   -2.   -2.
    -2.   -2.   -2.   -2.   -2.   -2.   -2.   -2.   -2.   -2.   -2.   -2. ]
    [-1.75 -1.75 -1.75 -1.75 -1.75 -1.75 -1.75 -1.75 -1.75 -1.75 -1.75 -1.75
    -1.75 -1.75 -1.75 -1.75 -1.75 -1.75 -1.75 -1.75 -1.75 -1.75 -1.75 -1.75]
    [-1.5 -1.5 -1.5 -1.5 -1.5 -1.5 -1.5 -1.5 -1.5 -1.5 -1.5 -1.5
    -1.5 -1.5 -1.5 -1.5 -1.5 -1.5 -1.5 -1.5 -1.5 -1.5 -1.5 -1.5 ]
    [-1.25 -1.25 -1.25 -1.25 -1.25 -1.25 -1.25 -1.25 -1.25 -1.25 -1.25 -1.25
    -1.25 -1.25 -1.25 -1.25 -1.25 -1.25 -1.25 -1.25 -1.25 -1.25 -1.25 -1.25]
    [-1.   -1.   -1.   -1.   -1.   -1.   -1.   -1.   -1.   -1.   -1.   -1.
    -1.   -1.   -1.   -1.   -1.   -1.   -1.   -1.   -1.   -1.   -1.   -1. ]
    [-0.75 -0.75 -0.75 -0.75 -0.75 -0.75 -0.75 -0.75 -0.75 -0.75 -0.75 -0.75
    -0.75 -0.75 -0.75 -0.75 -0.75 -0.75 -0.75 -0.75 -0.75 -0.75 -0.75 -0.75]
    [-0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5
    -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 ]
    [-0.25 -0.25 -0.25 -0.25 -0.25 -0.25 -0.25 -0.25 -0.25 -0.25 -0.25 -0.25
    -0.25 -0.25 -0.25 -0.25 -0.25 -0.25 -0.25 -0.25 -0.25 -0.25 -0.25 -0.25]
    [ 0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
      0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0. ]
    [ 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25
      0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25]
    [ 0.5   0.5   0.5   0.5   0.5   0.5   0.5   0.5   0.5   0.5   0.5   0.5
      0.5   0.5   0.5   0.5   0.5   0.5   0.5   0.5   0.5   0.5   0.5   0.5 ]
    [ 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75
      0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75]
    [ 1.   1.   1.   1.   1.   1.   1.   1.   1.   1.   1.   1.
      1.   1.   1.   1.   1.   1.   1.   1.   1.   1.   1.   1. ]
    [ 1.25 1.25 1.25 1.25 1.25 1.25 1.25 1.25 1.25 1.25 1.25 1.25
      1.25 1.25 1.25 1.25 1.25 1.25 1.25 1.25 1.25 1.25 1.25 1.25]
    [ 1.5   1.5   1.5   1.5   1.5   1.5   1.5   1.5   1.5   1.5   1.5   1.5
      1.5   1.5   1.5   1.5   1.5   1.5   1.5   1.5   1.5   1.5   1.5   1.5 ]
    [ 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75
      1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75]
    [ 2.   2.   2.   2.   2.   2.   2.   2.   2.   2.   2.   2.
      2.   2.   2.   2.   2.   2.   2.   2.   2.   2.   2.   2. ]
    [ 2.25 2.25 2.25 2.25 2.25 2.25 2.25 2.25 2.25 2.25 2.25 2.25
      2.25 2.25 2.25 2.25 2.25 2.25 2.25 2.25 2.25 2.25 2.25 2.25]
    [ 2.5   2.5   2.5   2.5   2.5   2.5   2.5   2.5   2.5   2.5   2.5   2.5
      2.5   2.5   2.5   2.5   2.5   2.5   2.5   2.5   2.5   2.5   2.5   2.5 ]
    [ 2.75 2.75 2.75 2.75 2.75 2.75 2.75 2.75 2.75 2.75 2.75 2.75
      2.75 2.75 2.75 2.75 2.75 2.75 2.75 2.75 2.75 2.75 2.75 2.75]]
    • 此XY直接用于计算z。计算结果也是二维数组。

    1 x = np.arange(-3, 3, 0.25)
    2 y = np.arange(-3, 3, 0.25)
    3 X, Y = np.meshgrid(x, y)
    4 Z = np.sin(X)+ np.cos(Y)

    创建图

    • 首先,使用图形方法生成二维图形。然后使用Axes3D功能将其转换为3D版本。

    • 之后,如果将预先计算的3D点序列X,Y,Z传递给3D图函数(例如plot),则可以

    
    
    1 fig = plt.figure()
    2 ax = Axes3D(fig)
    3 ax.plot_wireframe(X,Y,Z)
    4 plt.show()

    • 到此为止的处理总结如下。

    
    
     1 from mpl_toolkits.mplot3d import Axes3D
     2 import matplotlib.pyplot as plt
     3 import numpy as np
     4  5 x = np.arange(-3, 3, 0.25)
     6 y = np.arange(-3, 3, 0.25)
     7 X, Y = np.meshgrid(x, y)
     8 Z = np.sin(X)+ np.cos(Y)
     9 10 fig = plt.figure()
    11 ax = Axes3D(fig)
    12 13 # 线框
    14 ax.plot_wireframe(X,Y,Z)
    15 16 # 表面
    17 # ax.plot_surface(X, Y, Z, rstride=1, cstride=1)
    18 19 # 3D图
    20 # ax.plot3D(np.ravel(X),np.ravel(Y),np.ravel(Z))
    21 22 # 轮廓
    23 # ax.contour3D(X,Y,Z)
    24 # ax.contourf3D(X,Y,Z)
    25 26 # 散点图
    27 # ax.scatter3D(np.ravel(X),np.ravel(Y),np.ravel(Z))
    28 29 plt.show()
    • 除了plot_wireframe,还有几个函数可以让您绘制各种图表。

    线框
    # ax.plot_wireframe(X,Y,Z)
    表面
    # ax.plot_surface(X, Y, Z, rstride=1, cstride=1)
    3D图
    • plot3D是一个简单的函数,可以在三个维度上绘制给定的一维数组。由于X,Y,和Z是二维阵列,使用numpy的。拉威尔函数传递作为参数之前,将二维数组转换为一维阵列。如果绘制图形,则可以看到它们全部由一条直线相连。

    # ax.plot3D(np.ravel(X),np.ravel(Y),np.ravel(Z))
    轮廓
    • 轮廓f3D是一种用相同颜色填充相同高度的函数。

    # ax.contour3D(X,Y,Z)
    # ax.contourf3D(X,Y,Z)
    E:Anaconda3libsite-packages
    umpycore\_asarray.py:136: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray
    return array(a, dtype, copy=False, order=order, subok=True)
    散点图
    • 此方法绘制的点是三维尺寸而非直线。这也将转换为一维数组,然后传递给参数。

    # ax.scatter3D(np.ravel(X),np.ravel(Y),np.ravel(Z))
    
    
    小石小石摩西摩西的学习笔记,欢迎提问,欢迎指正!!!
  • 相关阅读:
    linux命令-ps
    solr参数说明
    CAP原理和BASE思想
    java多线程文件上传服务器
    swift的简介
    浅谈对【OSI七层协议】的理解
    手写简易WEB服务器
    JVM知识整理和学习(转载并修改)
    多线程学习笔记六
    多线程学习笔记五
  • 原文地址:https://www.cnblogs.com/shijingwen/p/14160209.html
Copyright © 2020-2023  润新知