Python pytorch实现绘制一维热力图
作者:zzz_979 时间:2022-04-03 21:09:14
热力图
热力图(Heat Map)是指用 X 轴 和 Y 轴 表示的两个分类字段确定数值点的位置,通过相应位置的矩形颜色去表现数值的大小,颜色深代表的数值大。
热力图是非常特殊的一种图,可以显示不可点击区域发生的事情。热力图非常关注分布,可以不需要坐标轴,其背景通常是图片或者地图,一般使用彩虹色系做展示。
热力图一般以二维居多,多用于图像处理领域。
热力图主要用于展示连续型数据的分布情况。例如用颜色展现某一范围内不同地区数据量的差异,网站分析等等。
优势:好看、易于理解,数据信息更直观有效,可以清晰地呈现数据在地理空间的分布、频率或密度情况。
缺点:效果过于柔化,不适合用作数据的精确表达,且不适合比较单一变量的大小。
一维热力图-----总体分布情况
根据折线图中的数据创建一维热图,类似于直方图,根据每个 bins 的出现频率绘制不同颜色
代码
可以通过imshow关键字参数设置imshow设置图像的数据范围。 这用元组(left, right, bottom, top)设置范围。
在范围内使用直方图的最小和最 * in边缘可将数据移动到其原始值
import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)
# 画布大小
plt.rcParams["figure.figsize"] = 5,2
# 顺序生成 -56 到 40 之间的96个数
pos = np.arange(-56,40) #there are 96 numbers from -56 to 39
print len(pos), pos.min(), pos.max()
# 生成 96 个随机数
p = np.random.rand(len(pos))
# 随机数转化成概率
p= p/np.sum(p)
# 根据每个数出现的概率,在 pos 中挑选 4000 个数
a= np.random.choice(pos, size=4000, p=p)
# 将 a 的取值范围划分为 96 个 bin
bins=np.arange(-56,41)
# 得到直方分布,hist 表示每个 bin 中数的个数 ,edges 表示 bin 的边界
hist, edges = np.histogram(a, bins)
hist=hist[np.newaxis,:]
# 热力图 x轴 和 y轴范围
extent=[bins.min(), bins.max(),0,1]
#画图
plt.imshow(hist, aspect ="auto", cmap="viridis", extent=extent)
plt.gca().set_yticks([])
plt.show()
一维热力图----数据变化情况
根据数据本身的波动情况,根据数值本身大小变换颜色
例图,可以看到数值大时,热力图更红,数值小时,热力图更蓝
代码
import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)
# 画布大小
plt.rcParams["figure.figsize"] = 5,4
# 生成 40 个 sin 函数值
x = np.sin(range(40))
# 每x个数计算平均值,即一段内的分布(此处取为1,即为每个数绘制分布)
a = x.reshape(1,-1)
a = np.mean(a, axis=0)
a=a[np.newaxis,:]
# 绘制热力图
figure = plt.figure()
axes = figure.add_subplot(211)
axes.matshow(a,aspect ="auto",cmap="Spectral_r", interpolation='bilinear')
# 不显示横纵坐标
plt.xticks([])
plt.yticks([])
# 绘制原始数据图
plt.subplot(212)
plt.plot(range(len(x)),x)
# x轴显示范围从第一个数到最后一个
plt.xlim((0,len(x)-1))
plt.show()
attention 热力图绘制原理
难点在于数据获取,获取最后一层梯度数据,即可知道注意力重点,根据梯度数据 resize 到原始数据,再画出热力图(根据数据变化情况),之后与原始数据对应,即可得到网络的高响应热力图
来源:https://blog.csdn.net/weixin_48018951/article/details/130942569
标签:Python,热力图
0
投稿
猜你喜欢
Golang标准库syscall详解(什么是系统调用)
2024-05-28 15:23:35
简单好用的PHP分页类
2023-11-22 09:32:39
浅谈 Webpack 如何处理图片(开发、打包、优化)
2024-06-14 20:48:11
python实现半自动化发送微信信息
2023-07-16 09:15:38
python最小生成树kruskal与prim算法详解
2021-06-10 01:56:45
Python Opencv中基础的知识点
2023-06-08 21:10:48
请谨慎对待程序的图标和名称
2011-06-16 20:35:22
MySQL高并发生成唯一订单号的方法实现
2024-01-28 00:27:38
Python pip配置国内源的方法
2021-02-18 14:53:55
laravel清除视图缓存的代码
2023-11-24 14:39:39
python的socket编程入门
2022-11-01 07:33:12
Django模型层实现多表关系创建和多表操作
2022-12-01 09:13:46
Go语言七篇入门教程七GC垃圾回收三色标记
2024-05-05 09:28:45
python打印日志方法的使用教程(logging模块)
2023-12-10 01:39:14
JavaScript高级程序设计 扩展--关于动态原型
2024-04-10 11:03:50
GoLang中生成UUID唯一标识的实现
2024-05-22 10:19:54
Go语言中数组的基本用法演示
2024-02-09 21:26:34
Python变量、数据类型、数据类型转换相关函数用法实例详解
2021-03-29 08:30:35
python itchat实现微信好友头像拼接图的示例代码
2021-04-12 18:14:56
js array数组对象操作方法汇总
2024-05-08 10:10:37