Python绘制类激活图曲线(热力曲线)

效果图

在这里插入图片描述

背景资料

笔者今天在查阅文献的过程中发现了这种表达方式,觉得表达清晰且有逼格,故想在自己的论文中使用。但是翻遍了中文网络却没有发现类似的教程。于是查阅了英文网络,发现在英文网络中,这种图叫做类激活图。
这种图像多用于深度学习领域用于分析网络结构中各层关注的敏感区域,以及一些气象地理等领域。但是并没有关于曲线的,所以在查资料的过程中非常艰难,后来在一个github仓库中发现了可以借鉴的方法。

参考代码

https://github.com/hfawaz/dl-4-tsc/blob/master/utils/utils.py

提炼后的代码

from scipy.interpolate import interp1d
import numpy as np
import matplotlib.pyplot as plt

max_length = 2000

def CAM(ts, cas):
    minimum = np.min(cas)

    cas = cas - minimum

    cas = cas / max(cas)
    cas = cas * 100

    x = np.linspace(0, ts.shape[0] - 1, max_length, endpoint=True)
    # linear interpolation to smooth
    f = interp1d(range(ts.shape[0]), ts)
    y = f(x)
    f = interp1d(range(ts.shape[0]), cas)
    cas = f(x).astype(int)
    plt.scatter(x=x, y=y, c=cas, cmap='jet', marker='.', s=10, vmin=0, vmax=100, linewidths=0.0)
    cbar = plt.colorbar()
    plt.show()
    plt.close()

解释

由于这段代码摘自时间序列相关的代码仓库,因此一些命名是TSC术语的缩写。
其中ts是序列的y值,而cas表示的就是序列的激活程度(可以理解为热力图中的热力)。
如果cas全为1,就会得到下图
在这里插入图片描述

理解

由于没有可以直接调用的函数,因此这段代码使用的是模拟的方式。
采用线性插值的方式将x、y序列拉长,虽然图像上看到的是有175个点,但是经过线性插值的拉长之后实际上有2000个点。tas序列表示颜色,一段经过拉长后长度为2000,大小在[0,100]的整数序列。
至于为什么要将175个点映射到2000个点,这是为了点状图中的点连起来,在视觉上被认为是平滑曲线。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值