无主之地2配置高吗|看真人裸体BBBBB|秋草莓丝瓜黄瓜榴莲色多多|真人強奷112分钟|精品一卡2卡3卡四卡新区|日本成人深夜苍井空|八十年代动画片

網易首頁 > 網易號 > 正文 申請入駐

Matplotlib 3D 繪圖基礎

0
分享至

Matplotlib 不僅可以繪制二維圖形,也支持基礎的三維可視化。在數據分析、科學計算和教學演示中,二維圖通常已經能夠表達大量信息,但當數據同時涉及三個變量,或者我們希望展示空間軌跡、曲面形狀、立體分布時,三維圖就具有明顯優勢。

例如,在二維坐標系中,一條曲線只能表現橫軸與縱軸之間的關系;而在三維坐標系中,點、線和面都可以在空間中展開,從而幫助我們觀察更復雜的結構。螺旋線、空間點云、函數曲面、立體柱狀圖等,都是典型的三維可視化對象。Matplotlib 對這些圖形提供了基礎支持,因此,掌握三維繪圖的基本方法,是理解 Matplotlib 圖形體系的重要延伸。

一、什么是 Matplotlib 的三維繪圖

在二維繪圖中,我們主要處理兩個坐標軸:橫軸 x 與縱軸 y。而在三維繪圖中,會進一步引入 z 軸,用來表示第三個方向上的位置或數值變化。這樣,數據點就不再只落在一個平面上,而是被放置在三維空間中進行觀察。

Matplotlib 的三維繪圖主要依賴 mplot3d 工具包。它不是一個與 Matplotlib 完全分離的獨立系統,而是在原有繪圖框架上的擴展。因此,三維繪圖依然延續 Matplotlib 的基本思想:先創建圖形對象,再創建坐標軸對象,最后在坐標軸上繪制圖形。換句話說,三維繪圖并不是一種全新的繪圖思路,而是二維繪圖在空間維度上的自然擴展。

通常,我們仍然先導入最基礎的兩個庫:

import numpy as np

其中:

matplotlib.pyplot 用于創建圖形、坐標軸以及控制圖形顯示;

numpy 用于構造數值數據,尤其適合生成曲線、網格和曲面數據。

二、三維坐標軸是如何創建的

學習 Matplotlib 三維繪圖時,首先要理解三維坐標軸的創建方式。因為只有創建出三維坐標軸,后續的散點圖、折線圖、曲面圖等才有意義。

在較早資料中,常見到以下導入方式:

from mpl_toolkits.mplot3d import Axes3D

但在當前常用寫法中,通常直接通過 projection='3d' 創建三維坐標軸即可。例如:

ax = plt.axes(projection='3d')

或者:

ax = fig.add_subplot(111, projection='3d')

這兩種方式本質上都可以創建三維坐標軸對象。對于初學者來說,第二種寫法通常更清楚,因為它明確表明:這個三維坐標軸 ax 屬于哪個 Figure 對象。也就是說,三維繪圖仍然遵循“圖形對象—坐標軸對象”的結構關系,只是這里的坐標軸不再是二維平面,而是三維空間中的繪圖區。

三、Matplotlib 三維繪圖的基本思路

雖然三維圖在視覺上比二維圖復雜,但它的繪圖流程與二維圖并沒有本質區別。一般來說,可以概括為以下幾個步驟。

1、準備數據

先構造 x、y、z 數據。

如果是三維散點圖或三維折線圖,通常直接準備三個一維數組即可;

如果是三維曲面圖或三維等高線圖,則通常需要先構造二維網格數據。

2、創建三維坐標軸

通過 projection='3d' 創建三維坐標軸對象 ax。

3、選擇圖形類型并繪制

例如:

ax.contour(...):繪制三維等高線圖

4、補充圖形信息

包括:

plt.show():顯示圖形

說明:可根據圖形布局需要使用 plt.tight_layout() 或其他布局控制方式。

從結構上看,三維繪圖并沒有脫離 Matplotlib 的通用模式。真正需要額外注意的,是不同圖形對數據組織方式的要求并不完全一樣。

四、三維繪圖中最常見的圖形類型

Matplotlib 支持多種三維圖形。最常見、也最值得先掌握的,主要是以下幾類。


1、三維散點圖

三維散點圖使用三個坐標值 (x, y, z) 來唯一確定一個點,因此它適合展示離散點在空間中的分布情況。

ax.scatter(xs, ys, zs)

它常用于:

? 觀察三維數據的空間分布

? 比較樣本在三個變量上的位置

? 展示隨機點云或聚類結果

2、三維折線圖

三維折線圖用于繪制一條在空間中連續變化的軌跡。

ax.plot(xs, ys, zs)

與二維折線圖相比,它多了一個 z 方向,因此更適合展示:

? 空間軌跡

? 螺旋線、參數曲線

? 某個變量隨路徑連續變化的過程

3、三維曲面圖

三維曲面圖用于展示二元函數的整體形狀。

ax.plot_surface(X, Y, Z)

這里的 X、Y 和 Z 通常都是二維數組,它們共同描述平面上每個網格點的位置和該位置的高度值。因此,曲面圖特別適合:

? 數學函數圖像

? 地形高度圖

? 二維輸入、單一輸出的函數關系可視化

4、三維柱狀圖

三維柱狀圖在三維空間中繪制立體柱體。

ax.bar3d(x, y, z, dx, dy, dz)

其中:

x、y、z 表示柱體底部起點;

dx、dy、dz 表示柱體在三個方向上的尺寸。

它適合用于:

? 多組分類數據的立體對比

? 展示“位置 + 高度”型數據

5、三維等高線圖

在三維坐標軸對象 ax 上,可使用:

ax.contour(X, Y, Z)

繪制三維等高線。它本質上是在 3D 坐標系中展示等值線。

它有時也會配合投影一起使用,以幫助觀察曲面高度的層級變化,因此適合:

? 分析曲面的層級結構

? 配合曲面圖一起使用,增強對高度變化的理解

五、案例一:3D 散點圖

三維散點圖是最適合入門的圖形之一,因為它的數據組織方式最直接:只要準備三個一維數組,就可以構成一組三維坐標點。

plt.show()


1、np.random.normal(0, 1, 100) 表示生成 100 個服從正態分布的隨機數,因此點云大致會集中在原點附近,但會向三維空間中隨機散開。

2、三維坐標軸是通過:

ax = fig.add_subplot(111, projection='3d')

或者:

fig, ax = plt.subplots(subplot_kw={"projection": "3d"})

創建出來的。這說明當前子圖是一個三維投影坐標軸,而不是普通二維坐標軸。

3、scatter() 會把 x[i]、y[i]、z[i] 組合成一個空間點,因此 100 個元素會形成 100 個三維散點。

繪制出來的結果通常表現為一團分布在空間中的紅色點。它本質上展示的是三組隨機變量在三維空間中的聯合分布情況。雖然這里的數據是隨機生成的,但這種圖形在數據探索中很常見。例如,當我們有三個數值特征時,就可以用三維散點圖初步觀察:

? 點是否集中;

? 是否存在明顯的空間分層;

? 是否可能存在離群點。

六、案例二:3D 螺旋線與曲面圖

三維繪圖不僅可以單獨展示一種圖形,也可以與子圖機制結合起來,形成對比展示。下面這個例子在同一張畫布中放置兩個三維子圖:左側繪制螺旋線,右側繪制曲面圖。它有助于同時理解“空間軌跡”和“空間曲面”這兩種不同的數據表達方式。

plt.show()


1、關于螺旋線圖

(1)為什么 x 和 y 會形成圓周運動

在這個例子中:

y1 = np.sin(t)

這是參數方程中最經典的一組組合。因為對于任意參數 t,點 (cos(t), sin(t)) 都會落在單位圓上,所以從俯視角度看,這條曲線會繞著原點做圓周運動。

(2)為什么會變成螺旋線

如果只有 x = cos(t) 和 y = sin(t),那么得到的只是二維平面中的圓。現在再加入:

z1 = t

這意味著隨著參數 t 增大,點在 z 方向不斷上升。于是,原本平面中的圓周運動就被“拉伸”為一條向上盤旋的空間曲線,也就是螺旋線。

(3)它適合表達什么

這類圖常用于說明:

? 參數曲線

? 周期運動與線性增長的結合

? 三維軌跡的連續變化

2、關于曲面圖

(1)為什么曲面圖通常要使用網格數據

三維曲面圖不是簡單地給出三個一維數組,而通常需要一個二維網格。也就是說,要先在平面上生成一系列 x 和 y 的組合點,再計算每個位置對應的函數值 z。例如:

Z2 = np.sin(np.sqrt(X2**2 + Y2**2))

這里的 X2 和 Y2 表示平面上的網格點坐標,而 Z2 表示對應位置的高度。只有在這樣的網格結構上,plot_surface() 才能把這些點連接成連續的曲面。

(2)這個函數圖像有什么特征

函數:

Z = sin(sqrt(X^2 + Y^2))

表示高度只與點到原點的距離有關,因此圖像通常會呈現一種以原點為中心向外擴散的波紋效果。它很像水面上出現的同心波。

(3)cmap='viridis' 的作用

cmap 用于設置顏色映射方案。曲面圖中不同高度會對應不同顏色,因此顏色本身也在幫助表達數值變化。viridis 是 Matplotlib 中較常用的一種漸變配色,層次清晰,適合展示連續數值變化。

(4)edgecolor='none' 的作用

它表示不繪制曲面網格邊界線。這樣圖面會更平滑,更適合觀察整體形狀。如果保留邊界線,圖會更強調網格結構,但也可能顯得更密、更雜。

七、如何理解三維圖的“觀看角度”

與二維圖相比,三維圖還有一個非常重要的問題:同一組數據,從不同角度觀察,視覺效果可能差異很大。

例如:

螺旋線從正面看,像一條起伏的曲線;

從上方俯視時,更像一個圓;

曲面圖從斜上方看,更容易看出高低起伏;

從正側面看,則可能只看到局部輪廓。

在實際繪圖中,可以通過下列方法調節觀察角度:

ax.view_init(elev=30, azim=45, roll=15)

其中:

? elev=30:俯視角(elevation),表示觀察者相對于水平面的高低角度

? azim=45:方位角(azimuth),表示觀察者圍繞豎直軸旋轉的角度

? roll=15:滾轉角,圍繞 viewing axis(視線軸)旋轉的角度

例如,在前面的螺旋線示例中加上一句:

ax1.view_init(elev=25, azim=45)

就可以讓讀者更容易看出它的盤旋上升結構。

說明:在基礎使用中,roll 參數可以省略,此時通常只調整 elev 與 azim。

對于三維圖來說,視角并不是純粹的“美化參數”,而是圖形表達的一部分。同一張圖,如果視角選擇不合適,可能會讓空間關系變得難以判斷。因此,學習三維繪圖時,應有意識地把“選擇觀察角度”也納入繪圖過程。

八、三維繪圖中常見的問題

Matplotlib 的 3D 功能適合教學演示、基礎可視化與輕量實驗;若需要更復雜的交互式三維場景,往往還需要專門的 3D 可視化工具。

在初學階段,三維繪圖經常會遇到以下幾類問題。

1、忘記創建三維坐標軸

如果只是寫:

ax = fig.add_subplot(111)

那么創建出來的是二維坐標軸,而不是三維坐標軸。此時后續再傳入三維數據時,就會報錯或表現異常。因此必須加上:

projection='3d'

2、曲面圖的數據維度不匹配

plot_surface(X, Y, Z) 要求 X、Y、Z 的形狀一致,通常都是二維數組。如果直接傳入一維數組,往往無法正確繪制曲面。

3、引號格式錯誤

有些課件或文檔中的代碼片段可能使用排版引號,如 ‘ ’ 或 “ ”。這些引號在 Python 中不是合法的字符串定界符。編寫代碼時應統一使用英文半角引號,例如:

ax.scatter(x, y, z, color='red')

4、過度依賴三維圖

三維圖雖然直觀,但也更容易因為視角、遮擋和透視效果造成閱讀困難。因此在正式分析中,應根據任務選擇圖形,而不是為了“更立體”就一律改成三維圖。很多情況下,二維圖反而更清晰。

小結

Matplotlib 的三維繪圖建立在二維繪圖體系之上,核心在于創建三維坐標軸,并根據數據形狀選擇合適的繪圖方法。入門階段應重點掌握散點圖、折線圖、曲面圖及視角調整方法,從而建立對三維數據表達方式的基本理解。

點贊有美意,贊賞是鼓勵

特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關推薦
熱點推薦
財務造假!10家A股公司退市,超25萬股東踩雷

財務造假!10家A股公司退市,超25萬股東踩雷

21世紀經濟報道
2026-06-12 18:59:56
普京再次回應戰爭起源:不是俄開戰,是基輔先向頓巴斯開火

普京再次回應戰爭起源:不是俄開戰,是基輔先向頓巴斯開火

桂系007
2026-06-12 23:57:08
美加墨世界杯第二場比賽就現空座,票價爭議浮出水面

美加墨世界杯第二場比賽就現空座,票價爭議浮出水面

澎湃新聞
2026-06-12 17:40:29
剛剛,人類歷史上首位萬億美元富豪誕生!

剛剛,人類歷史上首位萬億美元富豪誕生!

每日經濟新聞
2026-06-12 22:32:06
英媒一語驚人:中美貿易戰中,美國唯獨算錯的是中國的底牌!

英媒一語驚人:中美貿易戰中,美國唯獨算錯的是中國的底牌!

流史歲月
2026-06-12 18:30:08
現在的年輕人不敢開房了

現在的年輕人不敢開房了

微微熱評
2026-06-13 00:53:53
看完世界杯第2場,球迷看清了3個不爭事實,韓國最擅長踢歐洲球隊

看完世界杯第2場,球迷看清了3個不爭事實,韓國最擅長踢歐洲球隊

侃球熊弟
2026-06-12 11:56:01
CCTV5直播!世界杯“重頭戲”,超21億歐元對決,姆巴佩PK哈蘭德

CCTV5直播!世界杯“重頭戲”,超21億歐元對決,姆巴佩PK哈蘭德

麥子的籃球故事
2026-06-12 17:40:17
阿里高層這次真的生氣了

阿里高層這次真的生氣了

一見財經
2026-06-12 11:11:21
國安部披露:在我國某海域發現有較大型活體海洋動物被掛上傳感器,竊取海洋敏感數據

國安部披露:在我國某海域發現有較大型活體海洋動物被掛上傳感器,竊取海洋敏感數據

每日經濟新聞
2026-06-12 13:16:05
中國斷供稀土5個多月,日本工廠無一停產,是真擺脫了還是在硬撐

中國斷供稀土5個多月,日本工廠無一停產,是真擺脫了還是在硬撐

次元君情感
2026-06-01 14:27:53
63歲阿湯哥被曝“越老越瘋”,同行都看不下去了

63歲阿湯哥被曝“越老越瘋”,同行都看不下去了

生活觀察員啊
2026-06-11 01:22:03
打臉CBA,懷特塞德高調加入其他聯賽沒有傷病,上海隊陷入爭議

打臉CBA,懷特塞德高調加入其他聯賽沒有傷病,上海隊陷入爭議

宗介說體育
2026-06-12 16:35:22
美軍開始空襲伊朗

美軍開始空襲伊朗

財聯社
2026-06-11 05:42:11
劉宇寧發文回應戀情:清醒坦蕩的態度,才是明星該有的模樣

劉宇寧發文回應戀情:清醒坦蕩的態度,才是明星該有的模樣

陳意小可愛
2026-06-13 00:50:31
“張雪機車”獲得WSBK艾米利亞-羅馬涅站桿位賽第三名

“張雪機車”獲得WSBK艾米利亞-羅馬涅站桿位賽第三名

極目新聞
2026-06-12 23:00:07
中央開始嚴查,多地機關事業單位大整頓啟動,這幾類人受影響最大

中央開始嚴查,多地機關事業單位大整頓啟動,這幾類人受影響最大

職場資深秘書
2026-06-12 14:47:02
老人入住精神病院7年后查出梅毒;哈爾濱精神專科白漁泡醫院稱系舊疾,家屬出示入院前梅毒陰性檢測報告反駁

老人入住精神病院7年后查出梅毒;哈爾濱精神專科白漁泡醫院稱系舊疾,家屬出示入院前梅毒陰性檢測報告反駁

大風新聞
2026-06-12 12:12:20
內塔尼亞胡:特朗普不打伊朗了,沒提前告訴我

內塔尼亞胡:特朗普不打伊朗了,沒提前告訴我

政知新媒體
2026-06-12 19:06:11
謝娜再次翻車,這一次,她踢到鐵板了

謝娜再次翻車,這一次,她踢到鐵板了

桌子的生活觀
2026-06-12 11:58:27
2026-06-13 02:35:00
MediaTea
MediaTea
專業的數字媒體、新媒體技術
1888文章數 80關注度
往期回顧 全部

科技要聞

剛剛,人類歷史上首位萬億美元富豪誕生!

頭條要聞

美加墨世界杯第二場比賽就現空座 英媒:尷尬

頭條要聞

美加墨世界杯第二場比賽就現空座 英媒:尷尬

體育要聞

歐洲恐韓?肉德維德?

娛樂要聞

一天4個瓜,肖戰熱巴最意外

財經要聞

萬億美元順差背后,透露這些信號

汽車要聞

標配激光雷達/雙動力可選 昊鉑S600限時售17.99萬起

態度原創

游戲
藝術
旅游
本地
軍事航空

索尼PS國區運營神了!玩梗《黑袍》:我會玩你的游戲

藝術要聞

砸了640億,再賠160億!沙特“The Line”項目徹底涼了?

旅游要聞

印度有錢人真多酷暑辦理旅游簽證!不是有錢任性,是熱到活不下去

本地新聞

AK劉彰邂逅河北南大港濕地

軍事要聞

伊朗媒體:已故最高領袖葬禮推遲舉行

無障礙瀏覽 進入關懷版