标题:用 Qt 生成热图(heat map)
作者:pbe_sedm
日期:2013-05-25 13:43
内容:
热图有时候叫热区图或者热力图,都是用于表现某种事物密集度的图形化显示。
我写的这个没有画底图,不然会更有趣,比如一个键盘,一张房屋平面图,或者一张Google地图,拿它做什么用,完全取决于你的需要。
一、主要用途
1、网站设计,可以帮助设计人员知道用户喜欢点哪些地方,对哪些东西感兴趣,以此来改良设计,改善用户体验,百度和腾讯都有提供此类有偿服务。 对位置不敏感,就比如有张全身照的美女图,通过统计就可以知道别人最喜欢看美女的哪个部位,是不是很有意思。
2、模拟分布,比如气象云图、无线射频信号的分布等等,都可以用这个来做。
3、众多例子:http://www.patrick-wied.at/static/heatmapjs/showcases.html
二、原理
1、首先可以参考下面几个链接
JavaScript:[一个用canvas画热力图的利器] http://www.cnblogs.com/bdqlaccp/archive/2012/09/12/2681518.html
jQuery:[浅谈Heatmap] http://huoding.com/2011/01/04/39
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、我们保存一个整 ..
#1 [pxiao_xiao 06-29 15:43]
这是好贴啊 咋没人回复
#2 [XChinux 06-29 16:14]
需要用到这个的朋友自然有用,哈哈,大多数人碰不到这类需求.
#3 [zinsser 06-29 20:58]
对于这一类等值云图,用OpenGL实现似乎更为直接。但若要绘制等值线图,不知道有没有什么成熟的解决方案?
#4 [pbe_sedm 06-30 12:44]
如果把思路拓展一下,这种解决问题的方法可以在很多地方用得上,比如频谱分析的密度图,光谱图之类的,具体细节就不聊了,有心的朋友肯定能发现它的价值。
#5 [e730052 07-01 20:14]
这种程度,算完美了。