python 用 matplotlib 在 3D 空間繪制散點,體驗不同視角 實例詳解


圖形預覽:

 

 

 

說明:

在 3 維空間繪制點 (0,0, 0),(1, 1, 1),(2, 2, 2)及其在三個坐標平面的投影。

 

0、import

import numpy as npfrom 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' ) # 定義數據 
x = np.array([0, 1, 2]) y = np.array([0, 1, 2]) z = np.array([0, 1, 2]) # 繪制 3D 散點
points = ax.scatter(xs=x,    # x 軸坐標
                    ys=y,    # y 軸坐標
                    zs=z,    # z 軸坐標
                    zdir='z',    # 
                    c='r',    # color
                    s=70,    # size
 ) # 點在 3 個坐標平面上的投影
ax.scatter(0, y, z, zdir='z', c='green', s=z*28 )    # 投影在 yz 平面
ax.scatter(x, 0, z, zdir='z', c='gray', s=z*28 )    # 投影在 xz 平面
ax.scatter(x, y, 0, zdir='z', c='cyan', s=z*28 )    # 投影在 xy 平面


# 設置坐標軸標題和刻度
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=45    # 方位角
 ) # 顯示圖形
plt.show()

圖形:

 

 

 2、多子圖不同視角

# 定義數據 
x = np.array([0, 1, 2]) y = np.array([0, 1, 2]) z = np.array([0, 1, 2]) # --------------------------------------- 定義繪圖函數 -----------------------------------
def point3d(ax, theta1, theta2): # 繪制 3D 散點
    points = ax.scatter(xs=x,    # x 軸坐標
                        ys=y,    # y 軸坐標
                        zs=z,    # z 軸坐標
                        zdir='z',    # 
                        c='r',    # color
                        s=70,    # size
 ) # 點在 3 個坐標平面上的投影
    ax.scatter(0, y, z, zdir='z', c='green', s=z*28 )    # 投影在 yz 平面
    ax.scatter(x, 0, z, zdir='z', c='gray', s=z*28 )    # 投影在 xz 平面
    ax.scatter(x, y, 0, zdir='z', c='cyan', s=z*28 )    # 投影在 xy 平面


    # 設置坐標軸標題和刻度
    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=theta1,    # 仰角
                 azim=theta2    # 方位角
 ) # --------------------------------------- 創建畫布,划分子圖 ----------------------------------- # 使圖表元素中正常顯示中文
mpl.rcParams['font.sans-serif'] = 'SimHei'
# 使坐標軸刻度標簽正常顯示負號
mpl.rcParams['axes.unicode_minus'] = False # 創建畫布
fig = plt.figure(figsize=(32, 28), facecolor='lightyellow' ) # 創建 3D 坐標系
axes = fig.subplots(nrows=4, ncols=4, subplot_kw=dict(fc='whitesmoke', projection='3d', ), ) # --------------------------------------- 調用函數,繪制圖形 -----------------------------------
elevs = [0, 10, 20, 30] azims = [0, 30, 45, 60] for i, theta1 in enumerate(elevs): for j, theta2 in enumerate(azims): ax = axes[i, j] point3d(ax, theta1, theta2) ax.set_title(f'仰角:{theta1} 方位角:{theta2}') # 顯示圖形
plt.show()

圖形:

 

 

軟件信息:

 


免責聲明!

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



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