用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:\Anaconda3\lib\site-packages\numpy\core\_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))

 

 

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM