<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在進行資料視覺化時,對於一元函數f(x)=y
資料我們可以使用二維平面圖顯示,x軸表示自變數,y軸表示函數值;對於二元函數f(x,y)=z
資料我們也可以使用三維圖視覺化,x和y軸表示自變數,z軸表示函數值。由於顯示裝置的侷限性,對於三元函數f(x,y,z)=v
資料無法通過增加座標軸的方式視覺化,一個可行的方法是使用x、y和z軸表示自變數,使用資料點的顏色表示函數值。
如下圖所示:
本文實現瞭如上圖所示的三維散點圖,顏色表示數值大小,並增加了可以自定義範圍的側邊colorbar。
文章第二部分為實現程式碼及部分註釋,第三部分為對部分程式碼的詳細解釋,第四部分為參考的文章連結。
import matplotlib.colors import matplotlib.ticker import matplotlib.pyplot as plt import random # 1.0 初始化資料 # f(x,y,z) = v # 其中x,y,z為亂數,v=x*y*z x = [random.randint(0,100) for i in range(0,100)] y = [random.randint(0,100) for i in range(0,100)] z = [random.randint(0,100) for i in range(0,100)] v = [x[i]*y[i]*z[i] for i in range(0,100)] # 1.1 根據各個點的值(v[]),設定點的顏色值,每個點的顏色使用一個rgb三維的元組表示,例如,若想讓點顯示為紅色,則顏色值為(1.0,0,0) # 設定各個點的顏色 # 每個點的顏色值按照colormap("seismic",100)進行設計,其中colormap型別為"seismic",共分為100個級別(level) min_v = min(v) max_v = max(v) color = [plt.get_cmap("seismic", 100)(int(float(i-min_v)/(max_v-min_v)*100)) for i in v] # 2.0 顯示三維散點圖 # 新建一個figure() fig = plt.figure() # 在figure()中增加一個subplot,並且返回axes ax = fig.add_subplot(111,projection='3d') # 設定colormap,與上面提到的類似,使用"seismic"型別的colormap,共100個級別 plt.set_cmap(plt.get_cmap("seismic", 100)) # 繪製三維散點,各個點顏色使用color列表中的值,形狀為"." im = ax.scatter(x, y, z, s=100,c=color,marker='.') # 2.1 增加側邊colorbar # 設定側邊colorbar,colorbar上顯示的值使用lambda方程設定 fig.colorbar(im, format=matplotlib.ticker.FuncFormatter(lambda x,pos:int(x*(max_v-min_v)+min_v))) # 2.2 增加座標軸標籤 ax.set_xlabel('x') ax.set_ylabel('y') ax.set_zlabel('z') # 2.3顯示 plt.show()
執行結果如下:
如上圖所示,為了通過顏色表示各個點的值需要設定一個合理的值-點顏色對映關係。本文程式碼中使用"seismic"
colormap,同時設定colormap分為100個level。對應程式碼為:
color = [plt.get_cmap("seismic", 100)(int(float(i-min_v)/(max_v-min_v)*100)) for i in v]
在程式碼中plt.get_cmap("seismic",100)
會得到一個colormap物件,然後使用plt.get_cmap("seismic",100)(x)
可以得到對應x
級別的顏色程式碼值。例如:
a = plt.get_cmap("seismic",100)(0) b = plt.get_cmap("seismic",100)(100) print("a:", a) print("b:", b)
輸出結果為:
a: (0.0, 0.0, 0.3, 1.0)
b: (0.5, 0.0, 0.0, 1.0)
表示級別0對應的(r,g,b,alpha)顏色值為(0.0, 0.0, 0.3, 1.0)
,級別100對應的顏色值為(0.5, 0.0, 0.0, 1.0)
。
如果需要使用其他型別的colormap,可以通過設定colormap名得到不同的效果,詳細參考文章:python matplotlib自定義colorbar顏色條-以及matplotlib中的內建色條。
通過設定plot格式:
ax = fig.add_subplot(111,projection='3d')
再使用scatter()
函數繪製三維散點圖:
im = ax.scatter(x, y, z, s=100,c=color,marker='.')
其中s=100
為設定點的大小、c=color
為設定點的顏色,marker='.'
為設定點的形狀(此處為實心圓點)。
根據資料的格式,我們需要設定側邊colorbar顯示的數值範圍,例如,本例中最小值為825
,最大值為784179
。程式碼中使用lambda表示式計算顯示的值,預設顯示的值為[0,1]
,因此需要使用lambda公式將顯示的值調整到[825,784179]
。程式碼如下:
fig.colorbar(im, format=matplotlib.ticker.FuncFormatter(lambda x,pos:int(x*(max_v-min_v)+min_v)))
另外為了使點的顏色與colorbar顏色對應,需要使用
plt.set_cmap(plt.get_cmap("seismic", 100))
使的clormap
和colorbar
具有同樣的型別。
[1]. MATLAB scatter 畫二維/三維散點圖時 用顏色表示數值大小 colorbar
[2]. 三維散點圖加colorbar
[3]. 【python影象處理】彩色對映
[4]. matplotlib的colorbar自定義刻度範圍
[5]. Python中lambda的使用
到此這篇關於matplotlib之Pyplot模組繪製三維散點圖使用顏色表示數值大小的文章就介紹到這了,更多相關Pyplot繪製三維散點圖內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45