網(wǎng)站首頁 編程語言 正文
一、摘要
在進(jìn)行數(shù)據(jù)可視化時,對于一元函數(shù)f(x)=y
數(shù)據(jù)我們可以使用二維平面圖顯示,x軸表示自變量,y軸表示函數(shù)值;對于二元函數(shù)f(x,y)=z
數(shù)據(jù)我們也可以使用三維圖可視化,x和y軸表示自變量,z軸表示函數(shù)值。由于顯示設(shè)備的局限性,對于三元函數(shù)f(x,y,z)=v
數(shù)據(jù)無法通過增加坐標(biāo)軸的方式可視化,一個可行的方法是使用x、y和z軸表示自變量,使用數(shù)據(jù)點的顏色表示函數(shù)值。
如下圖所示:
本文實現(xiàn)了如上圖所示的三維散點圖,顏色表示數(shù)值大小,并增加了可以自定義范圍的側(cè)邊colorbar。
文章第二部分為實現(xiàn)代碼及部分注釋,第三部分為對部分代碼的詳細(xì)解釋,第四部分為參考的文章鏈接。
二、代碼
import matplotlib.colors import matplotlib.ticker import matplotlib.pyplot as plt import random # 1.0 初始化數(shù)據(jù) # f(x,y,z) = v # 其中x,y,z為隨機(jī)數(shù),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 根據(jù)各個點的值(v[]),設(shè)置點的顏色值,每個點的顏色使用一個rgb三維的元組表示,例如,若想讓點顯示為紅色,則顏色值為(1.0,0,0) # 設(shè)置各個點的顏色 # 每個點的顏色值按照colormap("seismic",100)進(jìn)行設(shè)計,其中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') # 設(shè)置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 增加側(cè)邊colorbar # 設(shè)置側(cè)邊colorbar,colorbar上顯示的值使用lambda方程設(shè)置 fig.colorbar(im, format=matplotlib.ticker.FuncFormatter(lambda x,pos:int(x*(max_v-min_v)+min_v))) # 2.2 增加坐標(biāo)軸標(biāo)簽 ax.set_xlabel('x') ax.set_ylabel('y') ax.set_zlabel('z') # 2.3顯示 plt.show()
運(yùn)行結(jié)果如下:
三、部分代碼解釋
1. colormap(顏色)映射設(shè)置。
如上圖所示,為了通過顏色表示各個點的值需要設(shè)定一個合理的值-點顏色映射關(guān)系。本文代碼中使用"seismic"
colormap,同時設(shè)置colormap分為100個level。對應(yīng)代碼為:
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)
可以得到對應(yīng)x
級別的顏色代碼值。例如:
a = plt.get_cmap("seismic",100)(0) b = plt.get_cmap("seismic",100)(100) print("a:", a) print("b:", b)
輸出結(jié)果為:
a: (0.0, 0.0, 0.3, 1.0)
b: (0.5, 0.0, 0.0, 1.0)
表示級別0對應(yīng)的(r,g,b,alpha)顏色值為(0.0, 0.0, 0.3, 1.0)
,級別100對應(yīng)的顏色值為(0.5, 0.0, 0.0, 1.0)
。
如果需要使用其他類型的colormap,可以通過設(shè)置colormap名得到不同的效果,詳細(xì)參考文章:python matplotlib自定義colorbar顏色條-以及matplotlib中的內(nèi)置色條。
2. 設(shè)置三維散點格式
通過設(shè)置plot格式:
ax = fig.add_subplot(111,projection='3d')
再使用scatter()
函數(shù)繪制三維散點圖:
im = ax.scatter(x, y, z, s=100,c=color,marker='.')
其中s=100
為設(shè)置點的大小、c=color
為設(shè)置點的顏色,marker='.'
為設(shè)置點的形狀(此處為實心圓點)。
3. 設(shè)置側(cè)邊colorbar
根據(jù)數(shù)據(jù)的格式,我們需要設(shè)置側(cè)邊colorbar顯示的數(shù)值范圍,例如,本例中最小值為825
,最大值為784179
。代碼中使用lambda表達(dá)式計算顯示的值,默認(rèn)顯示的值為[0,1]
,因此需要使用lambda公式將顯示的值調(diào)整到[825,784179]
。代碼如下:
fig.colorbar(im, format=matplotlib.ticker.FuncFormatter(lambda x,pos:int(x*(max_v-min_v)+min_v)))
另外為了使點的顏色與colorbar顏色對應(yīng),需要使用
plt.set_cmap(plt.get_cmap("seismic", 100))
使的clormap
和colorbar
具有同樣的類型。
四、參考
[1]. MATLAB scatter 畫二維/三維散點圖時 用顏色表示數(shù)值大小 colorbar
[2]. 三維散點圖加colorbar
[3]. 【python圖像處理】彩色映射
[4]. matplotlib的colorbar自定義刻度范圍
[5]. Python中l(wèi)ambda的使用
總結(jié)
原文鏈接:https://blog.csdn.net/Strengthennn/article/details/120173869
相關(guān)推薦
- 2022-11-30 Go語言k8s?kubernetes使用leader?election實現(xiàn)選舉_Golang
- 2022-08-02 c#?Task.Wait()與awaiat?Task異常處理的區(qū)別說明_C#教程
- 2022-09-30 Pygame游戲開發(fā)之太空射擊實戰(zhàn)子彈與碰撞處理篇_python
- 2023-11-23 pyside6兩個按鈕,一個控制子線程的開始,暫停,。一個控制子線程結(jié)束
- 2022-05-12 tp5使用阿里云oss存儲圖片
- 2023-12-17 當(dāng)springsecurity出現(xiàn)SerializationException問題
- 2022-06-07 victoriaMetrics庫布隆過濾器初始化及使用詳解_Golang
- 2022-05-25 Tomcat配置JMX遠(yuǎn)程連接的詳細(xì)操作_Tomcat
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支