heatmap(热图)_热图和热力图一样吗-程序员宅基地

技术标签: python  heatmap  热图  

热图有时候叫热区图或者热力图,都是用于表现某种事物密集度的图形化显示。
我写的这个没有画底图,不然会更好趣,比如一个键盘,一张房屋平面图,或者一张Google地图,拿它做什么用,完全取决于你的需要。
二、原理
1、首先可以参考下面几个链接
[heatmap.js 一个用canvas画热力图的利器] http://www.cnblogs.com/bdqlaccp/archive/2012/09/12/2681518.html
[浅谈Heatmap] http://huoding.com/2011/01/04/39
[pyHeatMap : 使用Python绘制热图的库] http://oldj.net/article/python-heat-map/
2、基本原理:
A、创建一个跟图片大小或者网页或者窗口一样大小的二维数组(可用一维实现),例如图片分辨率为1024x768,则你的二维数组为768行,1024列,数据所有元素均初始化为0。
B、准备两张同样大小的画布(在Qt下可用QImage,在JavaScript下可用canvas,在Python下可用PIL库的Image),一张用于绘制灰度渐变圆圈(假设为 Alpha_Canvas),一张用于着色后显示输出(Output_Canvas)。
C、准备一个调色板,调色板从0到255填充上线性渐变的颜色,这个颜色可根据需要自由指定,调色板主要用于着色操作中取颜色。
D、我们假设在画布上点击一下算是采一个点,则点击一下对应的数组元素的值增加1,用于标识该位置(又)被点击了一次。
E、我们保存一个整个数组中单个位置被点击次数最多的值(假设为:max),比如在整个画布中,(10,10)这个位置被点击了20次,而其他所有点均在该点的点击次数之下,则20被存储到该变量(max)中。这就意味着每点击一次都要拿当前坐标点的点击次数和最大点击次数相比,如果最大点击次数小于当前点击次数,则更新最大点击次数,并重新绘制整个图。
F、选择Alpha_Canvas画布,在被点击的地方绘制一个径向渐变的圆,圆心为被点击的坐标,半径可根据需要自由设置,径向渐变圆的是灰度渐变圆圈,整个径向渐变圆圈是一个黑色圆圈,但圆心的颜色要比边界的深,而圆心的Alpha通道值是该点的被点击次数(假设为:current_count)与被点击次数最多的值之比乘以255(255要根据你的绘图环境来确定,在Qt中255表示完全不透明,0表示完全透明),即公式:current_count/max*255。
G、选择Output_Canva画布,进行着色操作,根据上一步的圆心和半径可确定一个矩形区域,如果是重绘操作,则该矩形区域为整个图形区域。对该矩形区域进行遍历,取出Alpha_Canvas画布上每个颜色点的Alpha通道值,根据此值从调色板上取出对应的颜色,R、G、B三个值用从调色板取来的值,但Alpha通道值不能相同,在这里可以设置一个阈值,用于决定渐变开始的半径,也可以自由修改。将这四个值决定的颜色点绘制到Output_Canvas画布上,依此操作,直至遍历结束。
H、完成着色操作后,整个绘图过程就完毕了。
3、开源项目
JavaScript 版本:[heatmap.js] http://www.patrick-wied.at/static/heatmapjs/index.html
Python 版本:[pyHeatMap] https://github.com/oldj/pyheatmap

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41011336/article/details/85041639

智能推荐

DELL 7080MFF 黑苹果安装,优化_7080mff m2网卡-程序员宅基地

文章浏览阅读1w次,点赞2次,收藏10次。基本配置配置:dell 7080MFF (低压版)CPU:10700T内存:16 + 16硬盘:KIOXIA NVME 256GB ,MacKIOXIA-EXCERIA SATA SSD,DataKIOXIA-EXCERIA NVME 512,Win0WIFI:苹果拆机网卡+转接板(直接免驱),转接板需要屏蔽针脚屏幕:DELL UP2516D1. 安装主要参照官方文档司波图大神视频用gibMacOS制作恢复U盘下载OpenCore,OpenCorePkg’s releases_7080mff m2网卡

汇编quad_ARM 汇编-程序员宅基地

文章浏览阅读904次。1. 寄存器1.1 通用寄存器(X0-31)参数寄存器(X0 - X7): 用于传递函数的前面8个参数,多余8个参数的,超出部分通过栈传递返回值寄存器:(X0,X8): 用于保存返回值,如果是基本数据类型,返回值保存在X0,如果是结构体,结果的地址将保存在X8调用者保存的临时寄存器(X9-X15):如果调用者用到这些寄存器,在调用另外一个函数前,调用者必需要将受影响的寄存器保存在自己的堆栈中.它们..._汇编.quad

AAAI2021联邦学习论文集_flame: differentially private federated learning i-程序员宅基地

文章浏览阅读2.3k次。目前,已经开放了AAAI2021的Accept Paper List, 本文精选了14篇**联邦学习(Federated Learning)**的入选论文,分类如下:隐私保护(Private Protection)278: Secure Bilevel Asynchronous Vertical Federated Learning with Backward UpdatingQingsong Zhang, Bin Gu, Cheng Deng, Heng Huang4838: FLAME: Di._flame: differentially private federated learning in the shuffle model

Yarn实现的Hadoop集群高可用_hadoop高可用集群只能打开一个yarn网址-程序员宅基地

文章浏览阅读1.4k次。Yarn实现的Hadoop集群高可用;hadoop ResourceManger;Hadoop集群资源管理系统_hadoop高可用集群只能打开一个yarn网址

hive 修改cluster by算法_K-Means聚类算法原理及Python实践-程序员宅基地

文章浏览阅读580次。“聚类”(Clustering)试图将数据集中的样本划分为若干个不相交的子集,每个子集被称为一个“簇”或者“类”,英文名为Cluster。比如鸢尾花数据集(Iris Dataset)中有多个不同的子品种:Setosa、Versicolor、Virginica,不同品种的一些观测数据是具有明显差异的,我们希望根据这些观测数据将其进行聚类。下图可以看到,不同品种的鸢尾花的花萼(Sepal)和花瓣(Pe..._hive支持knn或者kmeans聚类么?

GradientBoosting和AdaBoost实现MNIST手写体数字识别_boostingminst手写数字集-程序员宅基地

文章浏览阅读2.9k次。一、两种算法简介:Boosting 算法简介Boosting算法,我理解的就是两个思想:1)“三个臭皮匠顶个诸葛亮”,一堆弱分类器的组合就可以成为一个强分类器;2)“知错能改,善莫大焉”,不断地在错误中学习,迭代来降低犯错概率当然,要理解好Boosting的思想,首先还是从弱学习算法和强学习算法来引入:1)强学习算法:存在一个多项式时间的学习算法以识别一组概念,且识别的正确..._boostingminst手写数字集

随便推点

generator-mybatis-generator-1.3.6生成实体类和Mapper.xml文件详解_mybatis-generator 1.3.6下载-程序员宅基地

文章浏览阅读3k次,点赞2次,收藏3次。在学习MyBatis的过程中,发现mybatis确实是非常好用的的框架,但是,手写映射文件很容易出错,所以可利用MyBatis生成器自动生成实体类、DAO接口和Mapping映射文件。这样可以省去很多的功夫,将生成的代码copy到项目工程中即可。当然了,eclipse上也有类似的插件,不过我选择generator是因为其方便,只需要下载一个jar包就好,下面就来说一下构建过程吧: 我的目录结构如下..._mybatis-generator 1.3.6下载

简化Cocos和Native交互利器_native.reflection.callstaticmethod-程序员宅基地

文章浏览阅读955次。背景我们在使用 Cocos 和 Native 进行交互的时候,发现体验并不是特别的友好。如下所示,为我们项目当中的一段代码(代码已脱敏),当检测到发生了 js 异常,我们需要通知 Native 端去做一些处理。jsException: function (scence, msg, stack) { if (cc.sys.isNative && cc.sys.os === cc.sys.OS_ANDROID) { jsb.reflection.callStatic_native.reflection.callstaticmethod

vue3.0 音频插件(vue-aplayer)_vue3aplayer音频-程序员宅基地

文章浏览阅读1.5w次,点赞6次,收藏15次。上篇文章我们说了怎么使用视频插件vue-vedio-player那么我们当然也有音频插件了我们选择使用vue-aplayer同样我们先安装这个插件npm install vue-aplayer -s我们需要在main.js里面导入并引用import vueAplayer from 'vue-aplayer' Vue.use(vueAplayer)那么我们怎..._vue3aplayer音频

VMware Workstation 无法连接到虚拟机。请确保您有权运行该程序、访问该程序使用的所有目录以及访问所有临时文件目录。未能将管道连接到虚拟机: 系统找不到指定的文件_未能将管道连接到虚拟机 系统找不到指定文件-程序员宅基地

文章浏览阅读5.1k次,点赞6次,收藏20次。尝试了下列博客上所有的方法,大概都是要杀死进程什么的,我还卸载VMware重装,都不好用,来来去去折腾了小一天。https://blog.csdn.net/hewenqing1/article/details/104138322?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight&depth_1-utm_source=distribute.pc_releva_未能将管道连接到虚拟机 系统找不到指定文件

随身WiFi刷入debian系统后挂载SD卡&U盘后安装宝塔面板_debian挂载u盘-程序员宅基地

文章浏览阅读1.7k次。随身WiFi刷入debian系统后挂载SD卡&U盘后安装宝塔面板以下以SD卡为例子修改usb为主动模式vi /usr/sbin/mobian-usb-gadget把下面这行添加到setup() { 的下一行echo host > /sys/kernel/debug/usb/ci_hdrc.0/role重启设备reboot创建挂载目录(www为宝塔默认安装目录)mkdir -p /www插上U盘,查看是否已经识别到fdisk -_debian挂载u盘

logback配置文件报Failed to create converter for [%clr] keyword-程序员宅基地

文章浏览阅读1.9k次。参考博客:Springboot项目启动报错:Failed to create converter for [%clr] keyword_failed to create converter for [%clr] keyword

推荐文章

热门文章

相关标签