溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么在Python中使用Matplotlib實現(xiàn)一個三維數(shù)據(jù)的散點圖

發(fā)布時間:2021-04-20 16:59:11 來源:億速云 閱讀:1338 作者:Leah 欄目:開發(fā)技術(shù)

這期內(nèi)容當中小編將會給大家?guī)碛嘘P(guān)怎么在Python中使用Matplotlib實現(xiàn)一個三維數(shù)據(jù)的散點圖,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

python是什么意思

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é)果大致如下:

怎么在Python中使用Matplotlib實現(xiàn)一個三維數(shù)據(jù)的散點圖

首先樣例的數(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ù)組。

怎么在Python中使用Matplotlib實現(xiàn)一個三維數(shù)據(jù)的散點圖

如上圖所示,是數(shù)據(jù)在matlab中打開的形式,因為我們需要畫出三維散點圖,會自動產(chǎn)生3×60的數(shù)組,每行代表每一維的數(shù)據(jù)。貼一張做出的Demo的成果圖:   

怎么在Python中使用Matplotlib實現(xiàn)一個三維數(shù)據(jù)的散點圖

怎么在Python中使用Matplotlib實現(xiàn)一個三維數(shù)據(jù)的散點圖

因為我是用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è)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(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)容。

AI