Python matplotlib – 3D 散佈圖

應用篇

這次要來介紹如何用matplotlib繪製3D的散佈圖。平面的散佈圖已經在這裡說明過了,如果還沒看過的人可以去看看!

3D散佈圖

在繪製3D散佈圖時我們會用到Axes3D的mpl_toolkits.mplot3d.axes3d這個Library。所以我們會在一開始的時候先import他。另外在繪製平面的散佈圖時我們會用到axes的add_subplot,但是在3D的場合我們會使用Axes3D。接著我們就來看看範例代碼吧!

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d.axes3d import Axes3D

# 製作隨機50個點(x, y, z軸)範圍在1~50
x = np.random.uniform(1, 50, 50)
y = np.random.uniform(1, 50, 50)
z = np.random.uniform(1, 50, 50)

# 製作figure
fig = plt.figure()

ax = Axes3D(fig)

# 設定ax為散佈圖
ax.scatter(x, y, z, c ='black')

plt.show()

執行結果

在這邊的代碼中使用到的np.random.uniform()的功能是,可以隨機生成數個數字。例如:np.random.uniform(1, 20, 50)的話就是範圍在1~20之中的數字隨機生成50個。

另外如果想要以別的角度來看這幅散佈圖的話,只要用滑鼠點著移動就可以了!

3D散佈圖 – color bar

如果在繪製3D散佈圖的同時,也想要讓各個點擁有不同的量的話,我們就會使用到color bar。例如在觀測各個高度的溫度時就可以使用到。

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d.axes3d import Axes3D

# 製作隨機50個點(x, y, z軸)範圍在1~50
x = np.random.uniform(1, 50, 50)
y = np.random.uniform(1, 50, 50)
z = np.random.uniform(1, 50, 50)

# 點(x, y, z)的大小
value = np.random.uniform(1, 30, 50)

# 製作figure
fig = plt.figure()
ax = Axes3D(fig)

# 製作 color map
color_map = plt.cm.get_cmap()

# 設定ax為散佈圖,製作color bar
map = ax.scatter(x, y, z, c =value, cmap=color_map)
fig.colorbar(map, ax = ax)

plt.show()

執行結果

上面的範例代碼中的value是點(x, y, z)分別代表的大小。另外color bar的顏色也可以自己指定,只是這次就先使用了默認值。以後有機會會在介紹如何使用color bar!

留言