Python pytorch实现绘制一维热力图
作者:zzz_979
热力图是非常特殊的一种图,可以显示不可点击区域发生的事情,这篇文章主要为大家介绍了如何利用pytorch实现绘制一维热力图,感兴趣的可以了解一下
热力图
热力图(Heat Map)是指用 X 轴 和 Y 轴 表示的两个分类字段确定数值点的位置,通过相应位置的矩形颜色去表现数值的大小,颜色深代表的数值大。
热力图是非常特殊的一种图,可以显示不可点击区域发生的事情。热力图非常关注分布,可以不需要坐标轴,其背景通常是图片或者地图,一般使用彩虹色系做展示。
热力图一般以二维居多,多用于图像处理领域。
热力图主要用于展示连续型数据的分布情况。例如用颜色展现某一范围内不同地区数据量的差异,网站分析等等。
优势:好看、易于理解,数据信息更直观有效,可以清晰地呈现数据在地理空间的分布、频率或密度情况。
缺点:效果过于柔化,不适合用作数据的精确表达,且不适合比较单一变量的大小。
一维热力图-----总体分布情况
根据折线图中的数据创建一维热图,类似于直方图,根据每个 bins 的出现频率绘制不同颜色
代码
可以通过imshow关键字参数设置imshow设置图像的数据范围。 这用元组(left, right, bottom, top)设置范围。
在范围内使用直方图的最小和最大bin边缘可将数据移动到其原始值
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 到原始数据,再画出热力图(根据数据变化情况),之后与原始数据对应,即可得到网络的高响应热力图
到此这篇关于Python pytorch实现绘制一维热力图的文章就介绍到这了,更多相关Python绘制一维热力图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!