Python?Matplotlib實(shí)現(xiàn)三維數(shù)據(jù)的散點(diǎn)圖繪制
一、背景
近期項(xiàng)目即將開展,計(jì)劃第一步就是實(shí)現(xiàn)數(shù)據(jù)的可視化,所以先學(xué)習(xí)一下數(shù)據(jù)展示相關(guān)Demo。選用Python2.7與Matplotlib來(lái)實(shí)現(xiàn),平臺(tái)采用Pycharm,值得一提的是,Matplotlib的安裝前首先要安裝Numpy包,但是在完成Numpy的安裝之后,樓主不能在PyCharm平臺(tái)下進(jìn)行自動(dòng)安裝,或者CMD中使用類似pip install Matplotlib,參考網(wǎng)上解決方案后采用直接去官網(wǎng)下載相應(yīng)的安裝包直接運(yùn)行安裝到相關(guān)目錄下。在此就不贅述了。
二、 參考
Python語(yǔ)言相對(duì)于其他語(yǔ)言對(duì)新手較為友好,不用花費(fèi)太多時(shí)間進(jìn)行語(yǔ)法學(xué)習(xí),但是在實(shí)際使用的過(guò)程中,因?yàn)镻ython中包含有大量的包與資源,在做項(xiàng)目時(shí),對(duì)于功能的堆積,實(shí)際上Python語(yǔ)言對(duì)于新手并不易于理解。相對(duì)于Java與C++是需要開發(fā)者從底層搭建,可能更易于理解修改(個(gè)人意見)。
三、實(shí)現(xiàn)過(guò)程
其中就有我們需要參考的部分,也就是mplot3d example code : 2dcollections3d_demo.py。下面貼出其中的代碼段。
""" ======================= Plot 2D data on 3D plot ======================= Demonstrates using ax.plot's zdir keyword to plot 2D data on selective axes of a 3D plot. """ 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()
樣例的運(yùn)行結(jié)果大致如下:
首先樣例的數(shù)據(jù)來(lái)自于隨機(jī)數(shù)的產(chǎn)生,但是在我實(shí)際使用的過(guò)程中,數(shù)據(jù)是需要預(yù)先存儲(chǔ)與導(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']
值得一提的是這只是我測(cè)試的數(shù)據(jù),在實(shí)際應(yīng)用過(guò)程中,數(shù)據(jù)的格式是多種多樣的,所以需要做數(shù)據(jù)格式轉(zhuǎn)化的模塊。同時(shí)采用.mat數(shù)據(jù)的格式,用戶可以用matlab打開,并對(duì)數(shù)據(jù)進(jìn)行更改之類的操作。采用這種方法導(dǎo)入后,會(huì)自動(dòng)形成數(shù)組。
如上圖所示,是數(shù)據(jù)在matlab中打開的形式,因?yàn)槲覀冃枰嫵鋈S散點(diǎn)圖,會(huì)自動(dòng)產(chǎn)生3×60的數(shù)組,每行代表每一維的數(shù)據(jù)。貼一張做出的Demo的成果圖:
因?yàn)槲沂怯肨ime變量做為Xlabel,同時(shí)模擬數(shù)據(jù)是等時(shí)間間距進(jìn)行采樣的,同時(shí)想要在不同的時(shí)間點(diǎn)采用不同的顏色。因此需要對(duì)ax.scatter(x,y,z,c)中的c變量進(jìn)行更改,可以用變量代替,這樣就可以用個(gè)循環(huán)結(jié)構(gòu)實(shí)現(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是屬于相對(duì)集成度較高的語(yǔ)言,之所以方便使用,是因?yàn)榇嬖谠S多大牛已經(jīng)完成底層的內(nèi)容,開發(fā)者只需要遵從下載的包中的使用規(guī)則,因此過(guò)程中對(duì)于許多函數(shù)不懂的地方,可以用Pycharm的Go to和Declaration功能進(jìn)入申明區(qū),并且可以從中看到函數(shù)的整體介紹,使用語(yǔ)法以及example。因此其中的功能較為有限,如果在短時(shí)間內(nèi)用Python做項(xiàng)目可能對(duì)于新手來(lái)說(shuō),由上到下的形式可能較為簡(jiǎn)易,但是對(duì)于個(gè)性化定制功能的話還有待探究。
第一篇博客。記錄一下,本周將學(xué)習(xí)Logistic回歸預(yù)測(cè),以及部分TensorFlow的原理與Demo,卡爾曼濾波,和一點(diǎn)數(shù)據(jù)融合算法。該篇屬于數(shù)據(jù)可視化,還會(huì)有3D柱狀圖的繪制與顯示將會(huì)盡快整理。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python學(xué)習(xí)之matplotlib繪制散點(diǎn)圖實(shí)例
- Python+matplotlib繪制不同大小和顏色散點(diǎn)圖實(shí)例
- 使用matplotlib中scatter方法畫散點(diǎn)圖
- Python利用matplotlib繪制散點(diǎn)圖的新手教程
- Python使用Matplotlib繪制三維散點(diǎn)圖詳解流程
- python3使用matplotlib繪制散點(diǎn)圖
- Python matplotlib繪制散點(diǎn)圖的實(shí)例代碼
- 使用matplotlib畫散點(diǎn)圖的方法
- matplotlib一維散點(diǎn)分布圖的實(shí)現(xiàn)
相關(guān)文章
python數(shù)據(jù)結(jié)構(gòu)鏈表之單向鏈表(實(shí)例講解)
下面小編就為大家?guī)?lái)一篇python數(shù)據(jù)結(jié)構(gòu)鏈表之單向鏈表(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07Requests什么的通通爬不了的Python超強(qiáng)反爬蟲方案!
今天帶大家學(xué)習(xí)Requests什么的通通爬不了的Python超強(qiáng)反爬蟲方案,文中有非常詳細(xì)的圖文介紹及代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有很好的幫助,需要的朋友可以參考下2021-05-05Python基礎(chǔ)教程之if判斷,while循環(huán),循環(huán)嵌套
這篇文章主要介紹了Python基礎(chǔ)教程之if判斷,while循環(huán),循環(huán)嵌套 的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04python第三方庫(kù)easydict的使用實(shí)例詳解
在?Python?中當(dāng)我們需要訪問(wèn)字典中的元素的時(shí)候,我們需要使用類似?a['example']?的形式來(lái)進(jìn)行使用,這個(gè)時(shí)候就可以使用 easydict 這個(gè)模塊了,今天通過(guò)本文給大家講解python第三方庫(kù)easydict的使用,感興趣的朋友跟隨小編一起看看吧2022-11-11ERLANG和PYTHON互通實(shí)現(xiàn)過(guò)程詳解
這篇文章主要介紹了ERLANG和PYTHON互通過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07出現(xiàn)module 'queue' has no attrib
這篇文章主要介紹了出現(xiàn)module 'queue' has no attribute 'Queue'問(wèn)題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04Python+Sklearn實(shí)現(xiàn)異常檢測(cè)
這篇文章主要為大家詳細(xì)介紹了Python如何利用Sklearn實(shí)現(xiàn)異常檢測(cè),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,感興趣的可以跟隨小編一起學(xué)習(xí)一下2022-12-12python?Scala函數(shù)與訪問(wèn)修辭符實(shí)例詳解
這篇文章主要為大家介紹了python?Scala函數(shù)與訪問(wèn)修辭符實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08