Heatmap.js 学习笔记

heatmap.js 2.0

github
https://github.com/pa7/heatmap.js/releases

参考博客 http://blog.csdn.net/rongchaoliu/article/details/47830799

一、简介

Heatmap.js(热图) 是目前应用最广的web动态热图javaScript库,帮助研究和可视化用户的行为。

热图有时候叫热区图或者热力图,都是用于表现某种事物密集度的图形化显示

用途:
1.网站设计,可以帮助设计人员知道用户喜欢点哪些地方,对哪些东西感兴趣,以此来改良设计,改善用户体验
2.用户调查:现在很多像购物网站,都用到heatmap分析顾客在网站上哪些地方点击量比较大
3.模拟分布,比如绘制热力地图、气象云图、无线射频信号的分布等等,都可以用这个来做


二、代码结构

1.js库包裹在一个立即执行匿名函数库中,避免污染全局变量命名空间

2.核心对象
1)Store(数据)
2)Canvas2dRenderer(绘制工具)
3)HeatMap(构建器)

3.通过global[‘h337’]暴露 创建工厂


三、热力图渲染原理

1、设置单点渲染模板
核心方法:canvas的createRadialGradient方法

每个点设置渲染半径,由渐变因子blur确定内圆比例,内圆与外圆的圆周间进行无色的放射渐变,达到中间透明度高,边缘透明度低的效果。这个无色的透明度渐变的圆形即为点的模板

2、根据模板绘制全部点
核心方法:canvas的drawImage方法

在每个点的位置按照模板进行绘制,达到重叠部分透明度叠加的效果

3、构建0到256的调色板
核心方法:canvas的createLinearGradient方法

    var gradient = paletteCtx.createLinearGradient(0, 0, 256, 1);
    for (var key in gradientConfig) {
      gradient.addColorStop(key, gradientConfig[key]);
    }

    paletteCtx.fillStyle = gradient;
    paletteCtx.fillRect(0, 0, 256, 1);

4、着色
核心方法:canvas的putImageData方法

对绘制的每个点进行着色,获取绘制的区域中每个像素,根据像素的透明度去调色板中取对应的颜色进行渲染,最后达到热力图的效果

四、代码解读

1.heatmapFactory 创建工厂对象

<1>通过h337属性名暴露给外界

global['h337'] = heatmapFactory;

<2>heatmapFactory内容

var heatmapFactory = {
  create: function(config) {
    return new Heatmap(config);
  },
  register: function(pluginKey, plugin) {
    HeatmapConfig.plugins[pluginKey] = plugin;
  }
};

creat方法:创建heatmap对象
register方法:注册一个heatmap插件,即给插件一个key以管理

<3>config为创建heatmap的参数配置信息

名称类型描述
containerDomNodeheatmap载体,必须
backgroundColorStringcanvas背景色
gradientObject渐变色,用于制作调色板
radiusNumber点半径
opacityNumber[0,1]热力图渲染透明度,设置该参数后,maxOpaticy、minOpaticy参数无效
maxOpacityNumber[0,1]热力图渲染允许的透明度最大值,默认为1.
minOpacityNumber[0,1]热力图渲染允许的透明度最小值,默认为0.
useGradientOpacityBoolean热力图渲染是否使用gradient渐变色的透明度,默认false,设置为true时opacity、maxOpaicy、minOpaticy无效。
onExtremaChangefunctioncallback渲染的数据极值发生变化的事件回调函数,由以下函数触发setData、setDataMax、setDataMin。
blurNumber[0,1]模糊因子,默认0.85
xFieldStringx坐标属性名称,默认为’x’
yFieldStringy坐标属性名称,默认为’y’
valueFieldString渲染属性名称,默认为’value’,若渲染属性不存在,则一个点value为1

2.heatmapInstance heatMap对象
h337.creat(config),命名为heatmapInstance
<1>heatmapInstance的API接口

方法参数描述
setDataObject[] data设置渲染的数据
addDataObjext data添加渲染的数据
removeData移除渲染的数据
setDataMaxNumber设置渲染最大值,并重新绘制
setDataMinNumber设置渲染最小值,并重新绘制
configureconfig设置热力图配置信息
repaint重绘
getData返回store中的数据
getDataURL返回热力图图片
getValueAtpoint返回一个像素点渲染数据

3.HeatmapConfig 默认配置

var HeatmapConfig = {
  defaultRadius: 40,
  defaultRenderer: 'canvas2d',
  defaultGradient: { 0.25: "rgb(0,0,255)", 0.55: "rgb(0,255,0)", 0.85: "yellow", 1.0: "rgb(255,0,0)"},
  defaultMaxOpacity: 1,
  defaultMinOpacity: 0,
  defaultBlur: .85,
  defaultXField: 'x',
  defaultYField: 'y',
  defaultValueField: 'value', 
  plugins: {}
};
名称默认值描述
defaultRadius40点半径
backgroundColorcanvas2d绘图工具,canvas绘图对象,2D
defaultGradient{ 0.25: “rgb(0,0,255)”, 0.55: “rgb(0,255,0)”, 0.85: “yellow”, 1.0: “rgb(255,0,0)渐变色,用于制作调色板
defaultMaxOpacity1透明度最大值
defaultMinOpacity0透明度最小值
defaultBlur0.85颜色渐变因子值,值越大,内圆越小,热力效果越小
defaultXFieldxx坐标属性名称
defaultYFieldyy坐标属性名称
defaultValueFieldvalue渲染字段名称

4.Store 数据管理

方法参数描述
setDataObject[] data设置渲染的数据
addDataObjext data添加渲染的数据
removeData移除渲染的数据
setDataMaxNumber设置渲染最大值,并重新绘制
setDataMinNumber设置渲染最小值,并重新绘制
setCoordinatorCoordinator设置事件管理对象,Coordinator为heatMap中定义事件管理类
_organiseDatadataPointforceRender将数据按照heatmap要求进行格式化
getData返回当前渲染的数据

5、Renderer (Canvas2dRenderer) 渲染管理

方法参数描述
Canvas2dRendererconfig渲染器初始化方法
_getColorPaletteconfig获取调色板
_setStylesconfig设置渲染样式,背景色、渐变因子、透明度
_prepareDatadata将store处理完成的数据转换为可渲染的数据
_getPointTemplateradius,blur根据圆半径和渐变因子确定一个点渲染的模板
_drawAlphadata根据渲染的数据进行点绘制,未着色
_colorize对绘制完成的渲染数据进行着色
renderPartialdata对传入的数据进行渲染
renderAlldata将传入的数据作为全部数据进行渲染
_updateGradientconfig更新渲染的渐变色,即重新设置调色板
updateConfigconfig更新渲染配置信息,即更新渲染的渐变色和渲染相关样式
setDimensionswidth,height设置画布宽高
_clear清除画布
getValueAtpoint获取一个像素点数据,包括颜色及透明度
getDataURL转换热力图为图片
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值