當前位置: 首頁>>技術教程>>正文


python – 輕鬆學會Matplotlib 3D繪圖

 

大多數數據可視化教程都給出了大致相同的基本內容:散點圖,折線圖,箱形圖,條形圖和熱圖等,一般都是2D平麵圖。

但是,如果我們希望跟進一步,該怎麽辦? 2D圖隻能顯示一對x–y軸之間的關係;而3D圖可以讓我們探索3對軸XyXzyz

在本文中,我將向您簡要介紹使用Matplotlib進行3D數據可視化的方法。

3D散點圖和線圖[Scatter圖和Line圖]

Matplotlib中的3D繪圖通過啟用實用程序工具包開始。通過pip安裝時,mplot3d庫隨您的標準Matplotlib安裝一起提供。隻要確保您的Matplotlib版本超過1.0。

導入此子模塊後,對於Matplotlib中的任何常規軸創建函數,可以通過傳遞projection=”3d”關鍵字來創建3D圖,:

from mpl_toolkits import mplot3d

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = plt.axes(projection=”3d”)

plt.show()

現在,我們的軸已創建,我們可以開始以3D繪圖。 3D繪圖功能非常直觀:scatter我們稱之為scatter3D,而不是僅通過Xy數據,我們越過Xyz。其他所有功能設置(例如顏色和線型)均與2D繪圖功能相同。

這是繪製3D線和3D點的示例。

fig = plt.figure()
ax = plt.axes(projection="3d")

z_line = np.linspace(0, 15, 1000)
x_line = np.cos(z_line)
y_line = np.sin(z_line)
ax.plot3D(x_line, y_line, z_line, ‘gray’)

z_points = 15 * np.random.random(100)
x_points = np.cos(z_points) + 0.1 * np.random.randn(100)
y_points = np.sin(z_points) + 0.1 * np.random.randn(100)
ax.scatter3D(x_points, y_points, z_points, c=z_points, cmap=’hsv’);

plt.show()

這是有關3D繪圖的最棒的部分:互動性。一旦以3D繪圖,繪圖的交互性對於探索可視化數據非常有用。看看我通過在圖上進行簡單的click-and-drag創建的一些不同視圖!

曲麵圖[Surface圖]

曲麵圖對於可視化整個3D場景中3個變量之間的關係非常有用。他們給出了完整的結構,並介紹了每個變量的值如何沿其他兩個變量的軸變化。

在Matplotlib中構建曲麵圖是一個三步過程。

(1)首先,我們需要生成構成曲麵圖的實際點。現在,生成所有3D表麵的點是不可能的,因為它們的數目是無限的!因此,我們將生成足夠的數據來估計表麵,然後推斷其餘點。我們將定義Xy點,然後使用函數計算z點。

fig = plt.figure()
ax = plt.axes(projection="3d")
def z_function(x, y):
    return np.sin(np.sqrt(x ** 2 + y ** 2))

x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)

X, Y = np.meshgrid(x, y)
Z = z_function(X, Y)

(2)第二步是繪製線框,這是我們對表麵的估計。

fig = plt.figure()
ax = plt.axes(projection="3d")
ax.plot_wireframe(X, Y, Z, color='green')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')

plt.show()

(3)最後,我們將曲麵投影到我們的線框估算值上並推斷所有點。

ax = plt.axes(projection='3d')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1,
                cmap='winter', edgecolor='none')
ax.set_title('surface');

漂亮吧!這就是我們豐富多彩的3D曲麵!

3D條形圖[bar圖]

條形圖在數據可視化項目中經常使用,因為它們能夠以簡單直觀的方式傳達信息,通常是某種類型的比較。 3D條形圖的優點在於,它們在保持2D條形圖的簡單性的同時又擴展了表示比較信息的能力。

條形圖中的每個條總是需要兩件事:位置和大小。借助3D條形圖,我們將為所有三個變量提供該信息x,y,z

請查看下麵的代碼和3D圖以獲取示例!

fig = plt.figure()
ax = plt.axes(projection="3d")

num_bars = 15
x_pos = random.sample(xrange(20), num_bars)
y_pos = random.sample(xrange(20), num_bars)
z_pos = [0] * num_bars
x_size = np.ones(num_bars)
y_size = np.ones(num_bars)
z_size = random.sample(xrange(20), num_bars)

ax.bar3d(x_pos, y_pos, z_pos, x_size, y_size, z_size, color=’aqua’)
plt.show()


參考資料

本文由《純淨天空》出品。文章地址: https://vimsky.com/zh-tw/article/4328.html,未經允許,請勿轉載。