30行python代碼設計_30行Python代碼實現3D數據可視化

原標題:30行Python代碼實現3D數據可視化

作者:潮汐

來源:Python技術

歡迎來到 編程教室~

我們之前的文章中有講解過不少 Matplotlib 的用法,比如:

之前我們基本都是用它來繪制二維的數據圖表。而今天文章中,我們將教大家如何用不到 30 行代碼繪制 Matplotlib 3D 圖形。

回顧 2D 作圖

用賽貝爾曲線作 2d 圖。此圖是用基于 Matplotlib 的 Path 通過賽貝爾曲線實現的,有對賽貝爾曲線感興趣的朋友們可以深入了解一下。在 matplotlib 中,figure 為畫布,axes 為繪圖區,fig.add_subplot、plt.subplot 方法均可以創建子圖。以下是作圖實踐。

importmatplotlib.path asmpath

importmatplotlib.patches asmpatches

importmatplotlib.pyplot asplt

fig, ax = plt.subplots

#定義繪圖指令與控制點坐標

Path = mpath.Path

# Path 控制坐標點繪制貝塞爾曲線

# 圖形數據構造

# MOVETO表示將繪制起點移動到指定坐標

# CURVE4表示使用4個控制點繪制3次貝塞爾曲線

# CURVE3表示使用3個控制點繪制2次貝塞爾曲線

# LINETO表示從當前位置繪制直線到指定位置

# CLOSEPOLY表示從當前位置繪制直線到指定位置,并閉合多邊形

path_data = [

(Path.MOVETO, ( 1.88, -2.57)),

(Path.CURVE4, ( 0.35, -1.1)),

(Path.CURVE4, ( -1.75, 1.5)),

(Path.CURVE4, ( 0.375, 2.0)),

(Path.LINETO, ( 0.85, 1.15)),

(Path.CURVE4, ( 2.2, 3.2)),

(Path.CURVE4, ( 3, 0.05)),

(Path.CURVE4, ( 2.0, -1.5)),

(Path.CLOSEPOLY, ( 1.58, -2.57)),

]

codes,verts = zip(*path_data)

path = mpath.Path(verts, codes)

patch = mpatches.PathPatch(path, facecolor= 'r', alpha= 0.5)

ax.add_patch(patch)

# plot control points and connecting lines

x, y = zip(*path.vertices)

line, = ax.plot(x, y, 'go-')

ax.grid

ax.axis( 'equal')

plt.show

心型效果圖 3D 帽子圖1

Matplotlib 繪制 3D 圖形使用的是 mplot3d Toolkit,即 mplot3d 工具包。繪制 3D 圖可以通過創建子圖,然后指定 projection 參數 為 3d 即可,返回的 ax 為 Axes3D 對象。

導入包:

frommatplotlib importcm

frommatplotlib.ticker importLinearLocator, FormatStrFormatter

frommpl_toolkits.mplot3d importAxes3D

繪圖全過程:

importmatplotlib.pyplot asplt

frommatplotlib importcm

frommatplotlib.ticker importLinearLocator, FormatStrFormatter

frommpl_toolkits.mplot3d importAxes3D

importnumpy asnp

fig = plt.figure

# 指定圖形類型是 3d 類型

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

# 構造數據

X = np.arange( -5, 5, 0.25)

Y = np.arange( -5, 5, 0.25)

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

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

Z = np.sin(R)

# Plot the surface.

surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm,

linewidth= 0, antialiased= False)

# Customize the z axis.

ax.set_zlim( -1.01, 1.01)

ax.zaxis.set_major_locator(LinearLocator( 10))

ax.zaxis.set_major_formatter(FormatStrFormatter( '%.02f'))

# Add a color bar which maps values to colors.

fig.colorbar(surf, shrink= 0.5, aspect= 5)

plt.show

呈現效果:

帽子圖1 3D 帽子圖2 importnumpy asnp

importmatplotlib.pyplot asplt

frommpl_toolkits.mplot3d importAxes3D

fig = plt.figure

# 指定圖形類型為 3d 類型

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

# X, Y value

X = np.arange( -5, 5, 0.25)

Y = np.arange( -5, 5, 0.25)

# 設置 x-y 平面的網格

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

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

# height value

Z = np.sin(R)

# rstride:行之間的跨度 cstride:列之間的跨度

# rcount:設置間隔個數,默認50個,ccount:列的間隔個數 不能與上面兩個參數同時出現

#vmax和vmin 顏色的最大值和最小值

ax.plot_surface(X, Y, Z, rstride= 1, cstride= 1, cmap=plt.get_cmap( 'rainbow'))

# zdir : 'z' | 'x' | 'y' 表示把等高線圖投射到哪個面

# offset : 表示等高線圖投射到指定頁面的某個刻度

ax.contourf(X,Y,Z,zdir= 'z',offset= -2)

# 設置圖像z軸的顯示范圍,x、y軸設置方式相同

ax.set_zlim( -2, 2)

plt.show

帽子圖2 3D 線性圖

3D 線性圖使用 Axes3D.plot來繪制。繪畫的基本方法:Axes3D.plot(xs, ys[, zs, zdir='z', *args, **kwargs])

參數說明:

參數

描述

xs

一維數組,點的 x 軸坐標

ys

一維數組,點的 y 軸坐標

zs

一維數組,可選項,點的 z 軸坐標

zdir

可選項,在 3D 軸上繪制 2D 數據時,數據必須以 xs,ys 的形式傳遞,若此時將 zdir 設置為 ‘y’,數據將會被繪制到 x-z 軸平面上,默認為 ‘z’

**kwargs

其他關鍵字參數,可選項,可參見 matplotlib.axes.Axes.plot

importnumpy

asnp

importmatplotlib.pyplot asplt

frommpl_toolkits.mplot3d importAxes3D

# 依次獲取畫布和繪圖區并創建 Axes3D 對象

fig = plt.figure

ax = fig.gca(projection= '3d')

# 第一條3D線性圖數據

theta = np.linspace( -4* np.pi, 4* np.pi, 100)

z1 = np.linspace( -2, 2, 100)

r = z1** 2+ 1

x1 = r * np.sin(theta)

y1 = r * np.cos(theta)

# 第二條3D線性圖數據

z2 = np.linspace( -3, 3, 100)

x2 = np.sin(z2)

y2 = np.cos(z2)

# 繪制3D線性圖

ax.plot(x1, y1, z1, color= 'b', label= '3D Line1')

ax.plot(x2, y2, z2, color= 'r', label= '3D Line2')

# 設置標題、軸標簽、圖例,也可以直接使用 plt.title、plt.xlabel、plt.legend...

ax.set_title( '3D Line View', pad= 15, fontsize= '10')

ax.set_xlabel( 'x ', color= 'r', fontsize= '14')

ax.set_ylabel( 'y ', color= 'g', fontsize= '14')

ax.set_zlabel( 'z ', color= 'b', fontsize= '14')

ax.legend

plt.show

結果顯示:

線性圖 3D 散點圖

繪制 3D 散點圖的基本方法是:Axes3D.scatter(xs, ys[, zs=0, zdir='z', s=20, c=None, depthshade=True, *args, **kwargs])

參數詳解:

參數

描述

xs

一維數組,點的 x 軸坐標

ys

一維數組,點的 y 軸坐標

zs

一維數組,可選項,點的 z 軸坐標

zdir

可選項,在 3D 軸上繪制 2D 數據時,數據必須以 xs,ys 的形式傳遞,若此時將 zdir 設置為 ‘y’,數據將會被繪制到 x-z 軸平面上,默認為 ‘z’

s

標量或數組類型,可選項,標記的大小,默認 20

c

標記的顏色,可選項,可以是單個顏色或者一個顏色列表支持英文顏色名稱及其簡寫、十六進制顏色碼等,更多顏色示例參見官網 Color Demo

depthshade

bool 值,可選項,默認 True,是否為散點標記著色以提供深度外觀

**kwargs

其他關鍵字

importmatplotlib.pyplot

asplt

importnumpy asnp

frommpl_toolkits.mplot3d importAxes3D

defrandrange(n, vmin, vmax):

return(vmax - vmin) * np.random.rand(n) + vmin

fig = plt.figure

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

n = 100

# For each set of style and range settings, plot n random points in the box

# defined by x in [23, 32], y in [0, 100], z in [zlow, zhigh].

forc, m, zlow, zhigh in[( 'r', 'o', -50, -25), ( 'b', '^', -30, -5)]:

xs = randrange(n, 23, 32)

ys = randrange(n, 0, 100)

zs = randrange(n, zlow, zhigh)

ax.scatter(xs, ys, zs, c=c, marker=m)

ax.set_title( '3D Diagram View', pad= 15, fontsize= '10')

ax.set_xlabel( 'x ', color= 'r', fontsize= '14')

ax.set_ylabel( 'y ', color= 'g', fontsize= '14')

ax.set_zlabel( 'z ', color= 'b', fontsize= '14')

plt.show

結果顯示為:

散點圖 總結

本文主要是介紹使用 Python 第三方庫 Matplotlib 來繪制 3D 圖形,當然除了上面演示的這幾種,還有更多豐富的圖形和功能等待你去挖掘。相比于 2D 圖形,3D 圖形可以多展現一個維度的數據特征,在可視化時會有更加直觀的效果。 在實際的數據可視化過程中,我們要根據具體需求來決定用怎樣的形式來展現,而多了解一些工具就可以更加游刃有余。這些強大的工具也正是 Python 在數據分析和可視化方面的一大優勢之一。

本文相關代碼下載地址:

https://github.com/JustDoPython/python-examples/tree/master/chaoxi/Matplotlib_3D

150年前,他對拿破侖做數據可視化 返回搜狐,查看更多

責任編輯:

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

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

相關文章

jq ajax traditional,jQuery ajax - param() 方法

更多實例我們可以如下顯示對象的查詢字符串表示以及 URI 編碼版本:var myObject {a: {one: 1,two: 2,three: 3},b: [1,2,3]};var recursiveEncoded $.param(myObject);var recursiveDecoded decodeURIComponent($.param(myObject));alert(recursiveEncoded);aler…

聯想x250為什么這么貴_外媒:聯想筆記本thinkpadX250如何聯想thinkpadX250價格及評價...

Thinkpad筆記本,thinkpad的中文名稱是“ Thinking Ben”。它曾經是IBM PC下的計算機品牌產品,在計算機行業中享有很高的聲譽。聯想收購IBM PC之后,Thinkpad的商標先前歸于聯想。自上市以來,ThinkPad一直是黑色,簡單且外…

接口測試用python怎么做_請問一下python怎么做接口測試工具?

茅侃侃之前使用過urllib和urllib2做接口測試,在做的途中,感覺使用urllib2直接進行的get,post 請求并沒有那么好用。作為測試人員,所需要的測試工具應當以方便為第一要務,測試的耗時只要是真正的無人值守,耗…

dw連接服務器文檔類型,dw怎么連接服務器的數據庫

dw怎么連接服務器的數據庫 內容精選換一換本章節指導您使用MongoDB客戶端和Robo 3T工具,通過公網連接副本集實例。用戶可以直接操作副本集主節點和備節點。主節點用于讀寫請求,您可以連接主節點對數據進行讀寫操作。備節點復制主節點數據,用于…

#控制臺大學課堂點名問題_你對大學生活的5大誤解!看完我想靜靜......

開學在即,對于即將走進校園的準大學生們來說,大學都是存在于別人描述中的象牙塔,帶有心向往之的美好“濾鏡”。在你們正式進入大學校園之前,小編決定,頂鍋蓋“打假”!帶你們打破“濾鏡”,用正確…

aix服務器屏幕顯示被鎖住了,Exceed登錄AIX遠程桌面的問題

今天用Exceed登錄新安裝的AIX遠程桌面,在ExceedXDMCPBrodcast中可以看到AIX主機,但是嘗試訪問遠程桌面時,無法打開登錄界面。查看錯誤日志/var/dt/Xerrors,發現錯誤信息如下:XIO: fatal IO error 73 (A connection wit…

axios獲取圖片顯示_Vue.js+axios圖片預覽以及上傳顯示進度

在平時項目開發中,我們經常會對文件做一些上傳操作,不僅僅要實現基本需求,也要兼顧用戶體驗,根據自己在工作中遇到的問題談談對圖片上傳的預覽以及上傳進度的優化。1.搭建項目基于Vue.jsaxios搭建的項目,新建一個Index…

劍盾神秘禮物正在維護服務器,寶可夢劍盾神秘禮物獲取途徑一覽

寶可夢劍盾神秘禮物獲取途徑一覽更新時間:2019-11-09作者:shaoshao寶可夢劍盾神秘禮物獲取攻略:活動、禮包以及禮物這系列的東西,想必一定是各位游戲玩家們最為喜愛的一部分了吧。在今日,寶可夢劍盾該款角色扮演類冒險…

httpurlconnect設置中文參數_CNC機床參數的設置及報警解除,趕緊收藏吧!

在三菱CNC的硬件連接檢查與設置執行完畢向系統送電后,顯示器上的READY綠燈仍然不亮。而且在〔診斷〕――〔報警〕 畫面上顯示很多報警內容,讓初次使用三菱CNC的調試工程師感到困惑。而且三菱CNC的參數多達700余種,哪些是開機時必須設置的呢&a…

createsolidcaret 后 很快就不閃爍了_為什么LED燈會越用越暗?為什么會閃爍?

現在LED燈的制作首先要經過嚴謹的電腦編程制作,制作好燈板,再進入裝配車間的流水線,具體咱們就不再展開了。大家都有這么一個生活經驗剛買回來的LED燈,總是特別亮,但是過一段時間后很多燈會變得越來越暗,為…

python最大約數是_python – 找到最大的公約數(賦值錯誤,我迫切需要你的幫助)

我有一個作業(作業)如下:Write a program which enters two positive integers a and b from thekeyboard. Also write a recursive function for determining the gcd(greatest common divisor) of a and b using Euclid’s algorithm.According to this algorithm…

c#簡單記事本應用程序的快捷方式_Windows 10七月更新又翻車,記事本沒了

每一次微軟更新,總是能引起一篇“哀嚎”,翻車實在太頻繁了,讓人又愛又恨。近日,微軟在本月更新補丁推送上,進行了新的調整,讓分預裝的應用程序被悄然刪除,這導致不少用戶只能逐一重新安裝。從目…

python我的世界給予物品指令_我的世界指令給予物品 我的世界指令給予物品是多少...

給予物品指令為 /give 人物id 物品id 數量,如果數量不填的話默認是64個。示例:/give AW fire_charge 64 給玩家AW 64個火焰彈。其他指令一覽/nick ID 名稱 -給某人改一個名 ID是加白名單的名字/backup -運行備份命令/fireball -發射一個火球(會破壞方塊)…

db2 空值轉換函數_Hive常見函數的使用

hive函數1.關系函數等值比較 語法&#xff1a;AB 如果表達式A和表達式B相等&#xff0c;則為TRUE&#xff1b;否則為FALSE不等值比較 <>語法&#xff1a;A <> B如果表達式A為null&#xff0c;或者表達式B為null&#xff0c;返回null&#xff1b;如果表達式A和表達式…

中級軟件測試筆試題100精講_匯集上千位軟件測試精英面試筆試題,最全面的題型都在這!...

知己知彼&#xff0c;才能百戰不殆測試員想要在競爭激烈的職場中擁有一席之地&#xff0c;就需要提前做好準備。前人栽樹&#xff0c;后人乘涼一次面試就能入職自己心儀的公司&#xff0c;就需要通過“前人”積累的面試題來了解面試官的“套路”&#xff0c;通過不斷的優化答案…

學考語言成績c對高考有影響嗎_三大影響!考生務必上心,最近正在進行的學考對升學很重要...

閱讀關鍵詞&#xff1a;【填報技巧】【新高考】近日(1月6-8日)&#xff0c;高中生們正在進行2021年1月普通高中學業水平合格性考試(也就是大家普遍說的“學考”&#xff0c;又稱“合格性考試”)。學考成績有哪些用途&#xff1f;跟高考錄取到底有什么關系&#xff1f;……今天我…

三次握手和四次揮手圖解_TCP三次握手和四次揮手詳解

作者&#xff1a;雨點的名字來源&#xff1a;https://www.cnblogs.com/qdhxhz/p/8470997.htmlTCP有6種標示:SYN(建立聯機) ACK(確認) PSH(傳送) FIN(結束) RST(重置) URG(緊急)一、TCP三次握手第一次握手客戶端向服務器發出連接請求報文&#xff0c;這時報文首部中的同部位SYN1…

ubuntu修改新增用戶的目錄_Linux 用戶、用戶組添加修改刪除(ubuntu、centos)

一、LINUX(UBUNTU/CENTOS)用戶添加刪除修改1、建用戶&#xff1a;adduser web #新建web用戶useradd web #添加web 用戶passwd web #給web用戶設置密碼useradd web -g admin -n -m #新建web用戶并指定用戶組為 admin用戶組,并自動建立登錄目錄passwd web #給web 用戶設置密碼use…

讀excel_基礎 | Excel中單元格的引用方式,讀這篇就夠了!

最近推送了幾個Excel中最難的函數&#xff0c;哀嚎遍野&#xff0c;太難了……所以今天我們來“從萬丈高樓平地起”的平地講起&#xff01;搞懂Excel單元格引用方式&#xff0c;是保證公式準確最最基本的條件&#xff01;單元格引用方式整體分三種&#xff1a;相對引用(A1)絕對…

天融信防火墻重置配置_天融信防火墻配置手冊

天融信防火墻配置指南一、對象與規則現在大多防火墻都采用了面向對象的設計。針對對象的行為進行的快速識別處理&#xff0c;就是規則。比如&#xff1a;甲想到A城市B地點。由這個行為就可以制定一些規則進行約束&#xff0c;例如&#xff1a;1)用戶身份識別&#xff0c;是不是…