網(wǎng)站首頁 編程語言 正文
一、摘要
在進行數(shù)據(jù)可視化時,對于一元函數(shù)f(x)=y
數(shù)據(jù)我們可以使用二維平面圖顯示,x軸表示自變量,y軸表示函數(shù)值;對于二元函數(shù)f(x,y)=z
數(shù)據(jù)我們也可以使用三維圖可視化,x和y軸表示自變量,z軸表示函數(shù)值。由于顯示設備的局限性,對于三元函數(shù)f(x,y,z)=v
數(shù)據(jù)無法通過增加坐標軸的方式可視化,一個可行的方法是使用x、y和z軸表示自變量,使用數(shù)據(jù)點的顏色表示函數(shù)值。
如下圖所示:
本文實現(xiàn)了如上圖所示的三維散點圖,顏色表示數(shù)值大小,并增加了可以自定義范圍的側邊colorbar。
文章第二部分為實現(xiàn)代碼及部分注釋,第三部分為對部分代碼的詳細解釋,第四部分為參考的文章鏈接。
二、代碼
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為隨機數(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[]),設置點的顏色值,每個點的顏色使用一個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()
運行結果如下:
三、部分代碼解釋
1. colormap(顏色)映射設置。
如上圖所示,為了通過顏色表示各個點的值需要設定一個合理的值-點顏色映射關系。本文代碼中使用"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中的內置色條。
2. 設置三維散點格式
通過設置plot格式:
ax = fig.add_subplot(111,projection='3d')
再使用scatter()
函數(shù)繪制三維散點圖:
im = ax.scatter(x, y, z, s=100,c=color,marker='.')
其中s=100
為設置點的大小、c=color
為設置點的顏色,marker='.'
為設置點的形狀(此處為實心圓點)。
3. 設置側邊colorbar
根據(jù)數(shù)據(jù)的格式,我們需要設置側邊colorbar顯示的數(shù)值范圍,例如,本例中最小值為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 畫二維/三維散點圖時 用顏色表示數(shù)值大小 colorbar
[2]. 三維散點圖加colorbar
[3]. 【python圖像處理】彩色映射
[4]. matplotlib的colorbar自定義刻度范圍
[5]. Python中l(wèi)ambda的使用
總結
原文鏈接:https://blog.csdn.net/Strengthennn/article/details/120173869
相關推薦
- 2022-03-14 has been blocked by CORS policy: Response to prefl
- 2022-05-17 使用@async 注解,導致訪問RequestContextHolder獲取request為空
- 2024-01-10 給idea添加右鍵打開功能
- 2023-04-19 nginx: [error] CreateFile() “D:\nginx-1.21.6/logs/
- 2022-05-06 Redis定時任務原理的實現(xiàn)_Redis
- 2023-07-15 oracle 序列/自增ID
- 2022-05-04 Golang小數(shù)操作指南之判斷小數(shù)點位數(shù)與四舍五入_Golang
- 2022-09-07 Golang使用CGO與Plugin技術運行加載C動態(tài)庫_Golang
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支