您好,登錄后才能下訂單哦!
這期內(nèi)容當中小編將會給大家?guī)碛嘘P(guān)怎么在Python中使用Matplotlib實現(xiàn)一個三維數(shù)據(jù)的散點圖,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
Python是一種跨平臺的、具有解釋性、編譯性、互動性和面向?qū)ο蟮哪_本語言,其最初的設(shè)計是用于編寫自動化腳本,隨著版本的不斷更新和新功能的添加,常用于用于開發(fā)獨立的項目和大型項目。
實現(xiàn)過程
其中就有我們需要參考的部分,也就是mplot3d example code : 2dcollections3d_demo.py。下面貼出其中的代碼段。
from mpl_toolkits.mplot3d import Axes3D import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax = fig.gca(projection='3d') # Plot a sin curve using the x and y axes. x = np.linspace(0, 1, 100) y = np.sin(x * 2 * np.pi) / 2 + 0.5 ax.plot(x, y, zs=0, zdir='z', label='curve in (x,y)') # Plot scatterplot data (20 2D points per colour) on the x and z axes. colors = ('r', 'g', 'b', 'k') x = np.random.sample(20*len(colors)) y = np.random.sample(20*len(colors)) c_list = [] for c in colors: c_list.append([c]*20) # By using zdir='y', the y value of these points is fixed to the zs value 0 # and the (x,y) points are plotted on the x and z axes. ax.scatter(x, y, zs=0, zdir='y', c=c_list, label='points in (x,z)') # Make legend, set axes limits and labels ax.legend() ax.set_xlim(0, 1) ax.set_ylim(0, 1) ax.set_zlim(0, 1) ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') # Customize the view angle so it's easier to see that the scatter points lie # on the plane y=0 ax.view_init(elev=20., azim=-35) plt.show()
樣例的運行結(jié)果大致如下:
首先樣例的數(shù)據(jù)來自于隨機數(shù)的產(chǎn)生,但是在我實際使用的過程中,數(shù)據(jù)是需要預(yù)先存儲與導(dǎo)入的。因此我添加數(shù)據(jù)導(dǎo)入部分:
import scipy.io as sio #get the data form F:\matlab.mat data = sio.loadmat('F:\matlab.mat') m = data['data']
值得一提的是這只是我測試的數(shù)據(jù),在實際應(yīng)用過程中,數(shù)據(jù)的格式是多種多樣的,所以需要做數(shù)據(jù)格式轉(zhuǎn)化的模塊。同時采用.mat數(shù)據(jù)的格式,用戶可以用matlab打開,并對數(shù)據(jù)進行更改之類的操作。采用這種方法導(dǎo)入后,會自動形成數(shù)組。
如上圖所示,是數(shù)據(jù)在matlab中打開的形式,因為我們需要畫出三維散點圖,會自動產(chǎn)生3×60的數(shù)組,每行代表每一維的數(shù)據(jù)。貼一張做出的Demo的成果圖:
因為我是用Time變量做為Xlabel,同時模擬數(shù)據(jù)是等時間間距進行采樣的,同時想要在不同的時間點采用不同的顏色。因此需要對ax.scatter(x,y,z,c)中的c變量進行更改,可以用變量代替,這樣就可以用個循環(huán)結(jié)構(gòu)實現(xiàn)顏色的切換功能。
for a in x: if a == 0.1: C.append('c') elif a == 0.2: C.append('r') elif a == 0.3: C.append('y') elif a == 0.4: C.append('k') ax.scatter(x, y, z, c=C)
顏色切換部分代碼如下:
import scipy.io as sio from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np def Singleplot(): data = sio.loadmat('F:\matlab.mat') m = data['data'] x = m[0] y = m[1] z = m[2] C = [] ax = plt.subplot(111, projection='3d') for a in x: if a == 0.1: C.append('c') elif a == 0.2: C.append('r') elif a == 0.3: C.append('y') elif a == 0.4: C.append('k') ax.scatter(x, y, z, c=C) ax.set_xlabel('Time') ax.set_ylabel('Frequence') ax.set_zlabel('Amplitude') plt.show() singleplot()
上述就是小編為大家分享的怎么在Python中使用Matplotlib實現(xiàn)一個三維數(shù)據(jù)的散點圖了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。