首頁 後端開發 Python教學 python中Matplotlib實作繪製3D圖方法介紹

python中Matplotlib實作繪製3D圖方法介紹

Sep 05, 2017 am 11:21 AM
matplotlib python 方法

本篇文章主要介紹了python中Matplotlib實作繪製3D圖的範例程式碼,具有一定的參考價值,有興趣的可以了解一下

Matplotlib 也可以繪製3D 影像,與二維影像不同的是,繪製三維影像主要透過mplot3d 模組實現。但是,使用 Matplotlib 繪製三維影像實際上是在二維畫布上展示,所以一般繪製三維影像時,同樣需要載入 pyplot 模組。
mplot3d 模組下主要包含4 個大類,分別是:

  • mpl_toolkits.mplot3d.axes3d()

  • #mpl_toolkits.mplot3d .axis3d()

  • mpl_toolkits.mplot3d.art3d()

  • mpl_toolkits.mplot3d.proj3d()






##其中,axes3d() 以下主要包含了各種實作繪圖的類別和方法。 axis3d() 主要是包含了和座標軸相關的類別和方法。 art3d() 包含了一些可將 2D 影像轉換並用於 3D 繪製的類別和方法。 proj3d() 中包含一些零碎的類別和方法,例如計算三維向量長度等。

一般情況下,我們用到最多的就是mpl_toolkits.mplot3d.axes3d() 中的mpl_toolkits.mplot3d.axes3d.Axes3D() 類,而Axes3D() 下面又存在繪製不同類型3D圖的方法。你可以透過下面的方式導入 Axes3D()。

from mpl_toolkits.mplot3d.axes3d import Axes3D或from mpl_toolkits.mplot3d import Axes3D

#三維散點圖

## numpy 隨機產生一組資料。


1

2

3

4

5

6

import numpy as np

 

# x, y, z 均为 0 到 1 之间的 100 个随机数

x = np.random.normal(0, 1, 100)

y = np.random.normal(0, 1, 100)

z = np.random.normal(0, 1, 100)

登入後複製
接下來,開始繪圖。第一步是載入 2D, 3D 繪圖模組。

1

2

from mpl_toolkits.mplot3d import Axes3D

import matplotlib.pyplot as plt

登入後複製

第二步,使用 Axes3D() 建立 3D 圖形物件。

1

2

<strong>fig = plt.figure()

ax = Axes3D(fig)</strong>

登入後複製
最後,呼叫散點圖繪製方法繪圖並顯示出來。

1

2

ax.scatter(x, y, z)

plt.show()

登入後複製

三維線型圖

線形圖和散佈圖相似,需要傳入x, y, z 三個座標的數值。詳細的程式碼如下。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

# 载入模块

from mpl_toolkits.mplot3d import Axes3D

import matplotlib.pyplot as plt

import numpy as np

 

# 生成数据

x = np.linspace(-6 * np.pi, 6 * np.pi, 1000)

y = np.sin(x)

z = np.cos(x)

 

# 创建 3D 图形对象

fig = plt.figure()

ax = Axes3D(fig)

 

# 绘制线型图

ax.plot(x, y, z)

 

# 显示图

plt.show()

登入後複製

三維柱狀圖

#繪製完線型圖,我們繼續嘗試繪製三維柱狀圖,其實它的繪製步驟和上面同樣非常相似。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

# 载入模块

from mpl_toolkits.mplot3d import Axes3D

import matplotlib.pyplot as plt

import numpy as np

 

# 创建 3D 图形对象

fig = plt.figure()

ax = Axes3D(fig)

 

# 生成数据并绘图

x = [0, 1, 2, 3, 4, 5, 6]

for i in x:

  y = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

  z = abs(np.random.normal(1, 10, 10))

  ax.bar(y, z, i, zdir=&#39;y&#39;, color=[&#39;r&#39;, &#39;g&#39;, &#39;b&#39;, &#39;y&#39;])

plt.show()

登入後複製

三維圖曲面圖

###接下來需要繪製的三維曲面圖要麻煩一些,我們需要對資料進行矩陣處理。其實和畫二維等高線圖很相似,只是多增加了一個維度。 ############

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

# 载入模块

import numpy as np

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

 

# 创建 3D 图形对象

fig = plt.figure()

ax = Axes3D(fig)

 

# 生成数据

X = np.arange(-2, 2, 0.1)

Y = np.arange(-2, 2, 0.1)

X, Y = np.meshgrid(X, Y)

Z = np.sqrt(X ** 2 + Y ** 2)

 

# 绘制曲面图,并使用 cmap 着色

ax.plot_surface(X, Y, Z, cmap=plt.cm.winter)

 

plt.show()

登入後複製
###cmap=plt.cm.winter 表示採用了 winter 配色方案,也就是下圖的漸層色。 #########混合圖繪製#########混合圖就是將兩種不同類型的圖繪製在一張圖裡。繪製混合圖一般有前提條件,那就是兩種不同類型圖的範圍大致相同,否則將會出現嚴重的比例不協調,而使得混合圖失去意義。 ############

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

# -*- coding: utf-8 -*

# 载入模块

from mpl_toolkits.mplot3d import Axes3D

import numpy as np

import matplotlib.pyplot as plt

 

# 创建 3D 图形对象

fig = plt.figure()

ax = Axes3D(fig)

 

# 生成数据并绘制图 1

x1 = np.linspace(-3 * np.pi, 3 * np.pi, 500)

y1 = np.sin(x1)

ax.plot(x1, y1, zs=0, c=&#39;red&#39;)

 

# 生成数据并绘制图 2

x2 = np.random.normal(0, 1, 100)

y2 = np.random.normal(0, 1, 100)

z2 = np.random.normal(0, 1, 100)

ax.scatter(x2, y2, z2)

 

# 显示图

plt.show()

登入後複製
######子圖繪製################

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

# -*- coding: utf-8 -*

# 载入模块

from mpl_toolkits.mplot3d import Axes3D

import matplotlib.pyplot as plt

import numpy as np

 

# 创建 1 张画布

fig = plt.figure()

 

#===============

 

# 向画布添加子图 1

ax1 = fig.add_subplot(1, 2, 1, projection=&#39;3d&#39;)

 

# 生成子图 1 数据

x = np.linspace(-6 * np.pi, 6 * np.pi, 1000)

y = np.sin(x)

z = np.cos(x)

 

# 绘制第 1 张图

ax1.plot(x, y, z)

 

#===============

 

# 向画布添加子图 2

ax2 = fig.add_subplot(1, 2, 2, projection=&#39;3d&#39;)

 

# 生成子图 2 数据

X = np.arange(-2, 2, 0.1)

Y = np.arange(-2, 2, 0.1)

X, Y = np.meshgrid(X, Y)

Z = np.sqrt(X ** 2 + Y ** 2)

 

# 绘制第 2 张图

ax2.plot_surface(X, Y, Z, cmap=plt.cm.winter)

 

# 显示图

plt.show()

登入後複製
###我們可以來看這些程式碼。由於兩張子圖是繪製在 1 張畫布上面的,所以這裡需要事先建立 1 張畫布。然後透過.add_subplot()加入子圖,子圖序號和二維繪圖相似,只是注意 3D 繪圖時要新增projection='3d'參數。 ###

以上是python中Matplotlib實作繪製3D圖方法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

手機字體大小設定方法(輕鬆調整手機字體大小) 手機字體大小設定方法(輕鬆調整手機字體大小) May 07, 2024 pm 03:34 PM

手機字體大小設定方法(輕鬆調整手機字體大小)

怎麼下載deepseek 小米 怎麼下載deepseek 小米 Feb 19, 2025 pm 05:27 PM

怎麼下載deepseek 小米

模板化的優點和缺點有哪些? 模板化的優點和缺點有哪些? May 08, 2024 pm 03:51 PM

模板化的優點和缺點有哪些?

Google AI 為開發者發佈 Gemini 1.5 Pro 和 Gemma 2 Google AI 為開發者發佈 Gemini 1.5 Pro 和 Gemma 2 Jul 01, 2024 am 07:22 AM

Google AI 為開發者發佈 Gemini 1.5 Pro 和 Gemma 2

如何選擇手機膜,保護你的手機螢幕(選購手機膜的幾個重點與技巧) 如何選擇手機膜,保護你的手機螢幕(選購手機膜的幾個重點與技巧) May 07, 2024 pm 05:55 PM

如何選擇手機膜,保護你的手機螢幕(選購手機膜的幾個重點與技巧)

deepseek怎麼問他 deepseek怎麼問他 Feb 19, 2025 pm 04:42 PM

deepseek怎麼問他

evaluate函數怎麼保存 evaluate函數怎麼保存 May 07, 2024 am 01:09 AM

evaluate函數怎麼保存

NET40是什麼軟體 NET40是什麼軟體 May 10, 2024 am 01:12 AM

NET40是什麼軟體

See all articles