Python數據可視化(七)

繪制 3D 圖形

到目前為止,我們一直在討論有關 2D 圖形的繪制方法和繪制技術。3D 圖形也是數據可視化的 一個很重要的應用方面,我們接下來就重點講解有關 3D 圖形的實現方法。繪制 3D 圖形通常需要導 入 mpl_toolkits 包中的 mplot3d 包的相關模塊,如 axes3d 模塊,模塊 axes3d 中包含類 Axes3D,對象 Axes3D 可以在 2D 的 matplotlib 畫布中繪制 3D 圖形對象。

一,繪制帶顏色標尺的彩色曲面

在 2D 畫布中繪制 3D 圖形時,繪制的本質就是繪制三維曲面,即由一對有序數對映射成的數據 值和有序數對所組成的三元元組在畫布上的描點成面。這個三維曲面不僅可以著色,還可以按照曲 面的高度分別涂上不同的顏色,同時用顏色標尺進行注釋,說明高度變化。接下來,我們就講解帶 顏色標尺的彩色曲面的繪制方法。

1.代碼示例

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
from mpl_toolkits.mplot3d import Axes3Dfig = plt.figure()
ax = fig.add_subplot(1, 1, 1, projection="3d")x = np.arange(-3, 3, 0.25)
y = np.arange(-3, 3, 0.25)
x, y = np.meshgrid(x, y)
r = np.sqrt(np.power(x, 2) + np.power(y, 2))
z = np.sin(r)# plot 3d surface
surf = ax.plot_surface(x, y, z,rstride=1,cstride=1,cmap=cm.coolwarm,linewidth=0,antialiased=False)# customize the z axis
ax.set(zlim=(-1, 1))
ax.zaxis.set_major_locator(LinearLocator(7))
ax.zaxis.set_major_formatter(FormatStrFormatter("%3.2f"))# add a color bar mapping values to colors
fig.colorbar(surf, shrink=0.6, aspect=10)plt.show()

2.代碼解釋?

為了繪制 3D 圖形,需要從 mpl_toolkits 包里的 mplot3d 包的 axes3d 模塊中導入類 Axes3D,實 現在 2D 的 matplotlib 畫布中繪制 3D 圖形對象的目標。

(1)通過調用“plt.figure()”語句,生成類 Figure 的實例 fig。

(2)向畫布 fig 中添加 3D 投影模式的子區,得到可以繪制 3D 圖形的坐標軸實例 ax。 接下來,設置 x 軸、y 軸和 z 軸的數據內容。

(3)這樣,我們就可以在坐標軸實例 ax 中,調用類 Axes3D 的實例方法 plot_surface()繪制曲 面了。通過參數 rstride 和 cstride 設置曲面上單位曲面的大小,參數 cmap 用于設置曲面補片的顏 色映射表類型。單位曲面(曲面補片)的銜接線的線條寬度設置為 0,以求突出曲面補片的顏色 變化情況。

(4)為了使 z 軸的刻度線和刻度標簽更加清晰和直觀,使用一組代碼對 z 軸的刻度線和刻度標 簽進行定制化設置,主要調整刻度線的數量和刻度標簽的小數點位數。

(5)向畫布中的曲面實例添加顏色標尺,通過參數 shrink 設置顏色標尺的整體大小,通過參數 aspect 設置標尺框的長和寬的比例。 這樣,通過上面的 Python 代碼,我們就完成了帶顏色標尺的彩色曲面的繪制任務。

二,在3D 空間里分層展示投射到指定平面后的2D 柱狀圖

我們在 2D 平面上可以繪制柱狀圖,如果要繪制多組數據的柱狀圖,則可以嘗試使用堆疊柱狀 圖或并列柱狀圖。但是,如果數據組數過多,那么使用這兩種柱狀圖展示數據的可視化效果就不是 很理想。這時候,我們可以先將多組數據的柱狀圖投射到指定平面上,再借助指定坐標軸將投射后 的柱狀圖分層,從而在 3D 空間里實現多組數據的分層展示的 2D 柱狀圖的繪制任務。?

1.代碼示例

import matplotlib.pyplot as plt
import numpy as npfrom mpl_toolkits.mplot3d import Axes3Dfig = plt.figure()
ax = fig.add_subplot(1, 1, 1, projection="3d")colorsList = ["r", "b", "y"]
yLayersList = [2, 1, 0]for color, layer in zip(colorsList, yLayersList):x = np.arange(10)y = np.random.rand(10)ax.bar(x, y, zs=layer, zdir="y", color=color, alpha=.7)ax.set(xlabel="X", ylabel="Y", zlabel="Z", yticks=yLayersList)plt.show()

2.代碼解釋?

(1)需要從 mpl_toolkits 包里的 mplot3d 包的 axes3d 模塊中導入類 Axes3D,實現在 2D 的 matplotlib 畫布中繪制 3D 圖形對象的目標。

(2)調用模塊 pyplot 中的函數 figure(),生成類 Figure 的實例 fig。

(3)向畫布 fig 中添加 3D 投影模式的子區,得到可以繪制 3D 圖形的坐標軸實例 ax。

(4)分別設置柱狀圖的柱體顏色和柱狀圖投射層次的序號,分別存儲在列表 colorsList 和 yLayersList 中。

(5)借助內置函數 zip(),獲得顏色和層次序號的元組列表,通過 for 循環實現迭代繪制柱狀圖 的目標。

(6)在 for 循環中,需要重點說明語句塊“ax.bar(x,y,zs=layer,zdir="y",color=color,alpha=.7)”的 作用,也就是類 Axes3D 的實例方法 bar()的使用方法。其中,參數 x 表示柱體左邊位置的列表;參 數 y 表示柱體高度的列表;參數 zs 是將柱狀圖進行投射的層次序號;參數 zdir 是將 z 軸用來表示柱 體的高度,即將 y 軸設定成 z 軸;參數 zs 和 zdir 組合使用的效果就是在 y 軸的刻度線位置 2、1 和 0 處所在的與 z 軸所屬平面平行的平面上繪制 2D 柱狀圖;參數 color 用于設置柱體的顏色;參數 alpha 用于設置柱體的透明度。這樣,我們就將 2D 柱狀圖投射到 z 軸所屬的平面上,再借助 y 軸分層展示投射到 z 軸所屬平面上的 2D 柱狀圖,從而實現在 3D 空間里分層展示投射到指定平面 后的 2D 柱狀圖。

(7)通過調用實例方法 set(),統一設置 x 軸、y 軸和 z 軸的坐標軸標簽,以及將 y 軸的刻度線位 置設置成投射層次的位置序號。類 Axes 的實例方法 set()是屬性批量設置器,也就是說,可以將類 Axes 的若干屬性設置一起放在實例方法 set()中來實現。

三,在 3D 空間里繪制散點圖

我們可以在 2D 平面內繪制散點圖,但在很多時候,出于實際項目需要,需要在 3D 空間里繪制 散點圖。在 3D 空間里繪制散點圖,就是在 x 軸和 y 軸之外再添加一條 z 軸后,使用三元有序數對在 3D 空間里進行描點。下面,我們就介紹在 3D 空間里繪制散點圖的實現方法。

1.代碼示例

import matplotlib.pyplot as plt
import numpy as npfrom mpl_toolkits.mplot3d import Axes3Dfig = plt.figure()ax = fig.add_subplot(projection = '3d')xs = np.random.rand(50) * 10
ys = np.random.rand(50) * 10 + 20
zs1 = np.random.rand(50) * 10
zs2 = np.sqrt(xs ** 2 + ys ** 2)ax.scatter(xs, ys, zs=zs1, zdir="z", c="cornflowerblue", marker="o", s=40)
ax.scatter(xs, ys, zs=zs2, zdir="z", c="purple", marker="^", s=40)ax.set(xlabel="X", ylabel="Y", zlabel="Z")plt.show()

2.代碼解釋?

與前面講過的導入 3D 繪圖模式一樣,同樣從 mpl_toolkits 包里的 mplot3d 包的 axes3d 模塊中導 入類 Axes3D,實現在 2D 的 matplotlib 畫布中繪制 3D 圖形對象的目標。

(1)調用模塊 pyplot 中的函數 figure(),生成類 Figure 的實例 fig。

(2)調用實例方法 add_subplot()獲得 3D 模式下的坐標軸實例 ax。

(3)構建一組模擬數據 xs、ys、zs1 和 zs2,用于繪制 3D 空間里的散點圖。

(4)調用類 Axes3D 的實例方法 scatter(),實例方法 scatter()的大部分參數與 2D 平面里的實例 方法 scatter()的大部分參數相同。這里需要重點說明的就是參數 zs。參數 zs 是與 xs 和 ys 數組長度 相同的數組,將 z 軸本身作為 z 坐標軸,這樣,就會在 z 軸上的 zs 列表里的元素的位置處繪制由 xs 和 ys 的對應位置的元素所組成的有序數對的坐標點。

(5)調用“ax.set(xlabel="X",ylabel="Y",zlabel="Z")”語句,設置 x 軸、y 軸和 z 軸的坐標軸標簽。 這樣,通過上面的操作步驟,就可以完成在 3D 空間里繪制散點圖的數據可視化任務。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/14411.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/14411.shtml
英文地址,請注明出處:http://en.pswp.cn/web/14411.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

三、Gazebo中實現機器人仿真(小白上手)+ubuntu18.04

接上一篇文章 1、\導航 vim .bashrc \先采用Nanocar嘗試導航 關閉終端:roslaunch robot_navigation gmapping.launch simulation:true rosrun teleop_twist_keyboard teleop_twist_keyboard.py 重啟終端: cd catkin_ws source ./devel/setu…

護網經驗面試題目原版

文章目錄 一、護網項目經驗1.項目經驗**Hvv的分組和流程**有沒有遇到過有意思的邏輯漏洞?有沒有自己開發過武器/工具?有做過代碼審計嗎?有0day嗎有cve/cnvd嗎?有src排名嗎?有沒有寫過技戰法有釣魚經歷嗎?具…

【數據結構】哈夫曼樹和哈夫曼編碼

一、哈夫曼樹 1.1 哈夫曼樹的概念 給定一個序列,將序列中的所有元素作為葉子節點構建一棵二叉樹,并使這棵樹的帶權路徑長度最小,那么我們就得到了一棵哈夫曼樹(又稱最優二叉樹) 接下來是名詞解釋: 權&a…

VC++位移操作>>和<<以及邏輯驅動器插拔產生的掩碼dbv.dbcv_unitmask進行分析的相關代碼

VC位移操作>>和<<以及邏輯驅動器插拔產生的掩碼dbv.dbcv_unitmask進行分析的相關代碼 一、VC位移操作符<<和>>1、右位移操作符 >>&#xff1a;2、左位移操作符 <<&#xff1a; 二、邏輯驅動器插拔產生的掩碼 dbv.dbcv_unitmask 進行分析的…

如何使用Suno:免費的AI歌曲生成器

文章目錄 Suno AI 是什么&#xff1f;Suno AI 如何工作&#xff1f;選擇Suno AI的理由&#xff1a;核心優勢易于操作多樣化創作靈活的定價策略版權保障技術突破 如何使用Suno AI創作歌曲&#xff1f;第1步&#xff1a;注冊Suno AI賬戶第2步&#xff1a;輸入提示詞創建第 3 步&a…

作業-day-240522

思維導圖 使用IO多路復用實現并發 select實現TCP服務器端 #include <myhead.h>#define SER_IP "192.168.125.112" #define SER_PORT 8888int main(int argc, const char *argv[]) {int sfdsocket(AF_INET,SOCK_STREAM,0);if(sfd -1){perror("socket er…

脆皮之“字符函數與字符串函數”寶典

hello&#xff0c;大家好呀&#xff0c;感覺我之前有偷偷摸魚了&#xff0c;今天又開始學習啦。加油&#xff01;&#xff01;&#xff01; 文章目錄 1. 字符分類函數2. 字符轉換函數3. strlen的使用和模擬實現3.1 strlen 的使用3.1 strlen 的模擬1.計算器方法2.指針-指針的方…

Python的shutil模塊探索,文件操作的瑞士軍刀

hello&#xff0c;大家好&#xff0c;我是一點&#xff0c;專注于Python編程&#xff0c;如果你也對感Python感興趣&#xff0c;歡迎關注交流。 希望可以持續更新一些有意思的文章&#xff0c;如果覺得還不錯&#xff0c;歡迎點贊關注&#xff0c;有啥想說的&#xff0c;可以留…

每周刷題第三期

個人主頁&#xff1a;星紜-CSDN博客 系列文章專欄&#xff1a;Python 踏上取經路&#xff0c;比抵達靈山更重要&#xff01;一起努力一起進步&#xff01; 目錄 題目一&#xff1a;環形鏈表 題目二&#xff1a;刪除有序數組中的重復項 題目三&#xff1a;有效的括號 題…

從左上角到右下角的最小距離和

題目描述&#xff1a;給定一個二維數組matrix&#xff0c;一個人必須從左上角出發&#xff0c;最后到達右下角&#xff0c;沿途只可以向下或者向右走&#xff0c;沿途的數字都累加就是距離累加和&#xff0c;返回最小距離累加和。 way&#xff1a;無他&#xff0c;dp[i] [j]表…

《隊列》

描述 學校體操隊到操場集合&#xff0c;排成每行2人&#xff0c;最后多出1人;排成每行3人&#xff0c;也多出1人。分別排成每行4、5、6人&#xff0c;都多出1人。當排成每行7人時&#xff0c;正好不多,求校體操隊至少多少人。 輸入描述 無 輸出描述 滿足要求的人數 樣例輸入…

Python語法學習之 - 生成器表達式(Generator Expression)

第一次見這樣的語法 本人之前一直是Java工程師&#xff0c;最近接觸了一個Python項目&#xff0c;第一次看到如下的代碼&#xff1a; i sum(letter in target_arr for letter in source_arr)這條語句是計算source 與 target 數組中有幾個單詞是相同的。 當我第一眼看到這樣…

shell遍歷路徑所有文件并把列表寫成字符串遍歷

1. ls dir/* | tr ‘\n’ ’ ’ 換行替換成空格 你可以使用 ls 命令和 tr 命令來將文件列表根據空格拼接起來成一個字符串。以下是一個示例&#xff1a; ls dir/* | tr \n 解釋 ls dir/*&#xff1a;列出 dir 目錄下的所有文件。tr \n &#xff1a;將所有的換行符&#xf…

ChatGPT生成常見面試題【面試準備】

ChatGPT生成常見面試題【面試準備】 前言版權ChatGPT生成常見面試題【面試準備】MySQL面試問題與回答1. 數據庫連接與操作2. 索引和查詢優化3. 事務管理4. 索引是什么&#xff1f;為什么使用索引可以提高查詢性能&#xff1f;如何在MySQL中創建索引&#xff1f;5. SQL查詢優化有…

Varjo XR-4功能詳解:由凝視驅動的XR自動對焦相機系統

Varjo是XR市場中擁有領先技術的虛擬現實設備供應商&#xff0c;其將可變焦距攝像機直通系統帶入到虛擬和混合現實場景中。在本篇文章中&#xff0c;Varjo的技術工程師維爾蒂莫寧詳細介紹了這項在Varjo XR-4焦點版中投入應用的技術。 對可變焦距光學系統的需求 目前所有其他XR頭…

WPF之容器標簽之Canvas布局標簽

Canvas: 定義一個區域&#xff0c;可在其中使用相對于 Canvas 區域的坐標以顯式方式來定位子元素。 實例 可以在子標簽使用Canvas屬性設置定位 <Canvas Width"500" Height"300"><StackPanel Width"100" Height"100"Backgro…

網頁抓取之requests庫的使用

Python網絡數據采集利器 - Requests庫的使用指南 簡介 在Python網絡爬蟲領域,優秀的第三方庫Requests可謂是必學的重要工具。它提供了相當人性化的API,讓我們能夠用極其簡潔的代碼發送HTTP/HTTPS請求,并且自動處理cookies、headers、編碼等諸多繁瑣細節,大大減輕了網頁抓取的…

【pdb的使用方法】

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 一、 pdb 是什么&#xff1f;二、基本用法1.啟動 PDB 調試器&#xff1a;2.單步執行代碼&#xff1a;3.查看變量值&#xff1a;4.退出調試器&#xff1a; 三、高級用…

指數分布的理解,推導與應用

指數分布的定義 在浙大版的教材中&#xff0c;指數分布的定義如下&#xff1a; 若連續型的隨機變量 X X X的概率密度為&#xff1a; f ( x ) { 1 θ e ? x θ , x>0 0 , 其他 f(x) \begin{cases} \frac{1}{\theta} e^{-\frac{x}{\theta}}, & \text{x>0}\\ 0, &a…

mvn編譯所有單元測試報錯OOM

org.mockito.exceptions.base.MockitoException: Cannot instantiate InjectMocks field named ‘productLogic’ of type ‘class .ProductLogic’. You haven’t provided the instance at field declaration so I tried to construct the instance. However the constructo…