热点图heatMap.js V2.0 研究笔记
来源:互联网 发布:软件测试中心 编辑:程序博客网 时间:2024/05/17 00:05
Heatmap.js 是目前应用最广的web动态热图javaScript库,最新版本是2.0。
方法 描述
一、传送门
官方地址:http://www.patrick-wied.at/static/heatmapjs/
官方文档地址:http://www.patrick-wied.at/static/heatmapjs/docs.html
heatMap参考文章:http://blog.corunet.com/how-to-make-heat-maps/
http://huoding.com/2011/01/04/39
http://1.aisensiy.sinaapp.com/2011/12/heatmapjs/
http://blog.csdn.net/long405581649/article/details/24581449
二、代码结构
1、整个js库包裹在一个立即执行的匿名函数里,以避免污染全局命名空间。这也是很多js库的常见写法。
2、核心对象有三个:Store(数据)、Canvas2dRenderer(绘制工具)、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 h337
heatmapFactory创建工厂对象
global['h337'] = heatmapFactory;通过h337属性名暴露给外界。
creat
创建heatmap对象register
注册一个heatmap插件,即给插件一个key以管理creat方法
create: function(config) {
return new Heatmap(config);
}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无效。建议不设置该参数。onExtremaChangefunction callback渲染的数据极值发生变化的事件回调函数,由以下函数触发setData、setDataMax、setDataMin。可用于图例的展示,2.0版本中不再在库中内置图例展示。blurNumber[0,1]模糊因子,适用于所有的数据点。默认为0.85。模糊因子越高,梯度就越平滑。也就是做放射颜色渐变时的内圆半径越小。xFieldStringx坐标属性名称,默认为'x'yFieldStringy坐标属性名称,默认为'y'valueFieldString渲染属性名称,默认为'value',若渲染属性不存在,则一个点value为12、heatmapInstance heatMap对象
h337.creat(config)返回的是heatMap对象,且命名为
heatmapInstance。heatmapInstance的API接口如下:
方法 参数 描述 setDataObject[] data设置渲染的数据addDataObjext data添加渲染的数据removeData移除渲染的数据,预留的方法,尚未实现setDataMaxNumber设置渲染最大值,并重新绘制setDataMinNumber设置渲染的最小值,并重新绘制configureconfig设置热力图配置信息repaint
重绘getData
返回store中的数据getDataURL返回热力图图片getValueAtpoint返回一个像素点渲染数据
3、
HeatmapConfig 默认配置
名称 默认值 描述 defaultRadius40 点半径backgroundColorcanvas2d绘图工具,canvas绘图对象,因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颜色渐变因子值,值越大,内圆越小,热力效果越小。
ps:1-defaultBlur的值作为CanvasRenderingContext2D.createLinearGradient()方法第三个实参,即渐变开始圆的半径。defaultXFieldxx坐标属性名称defaultYFieldyy坐标属性名称defaultValueFieldvalue渲染字段名称
4、
Store 数据管理
方法 参数 描述 setDataObject[] data设置渲染的数据addDataObjext data添加渲染的数据removeData移除渲染的数据,预留的方法,尚未实现setDataMaxNumber设置渲染最大值,并重新绘制setDataMinNumber设置渲染的最小值,并重新绘制setCoordinatorCoordinator设置事件管理对象,Coordinator为heatMap中定义的事件管理类_organiseData<Object>dataPoint,<Boolean>forceRender将数据按照heatmap要求进行格式化getData返回当前渲染的数据
5、Renderer (Canvas2dRenderer) 渲染管理
方法 参数 描述 Canvas2dRendererconfig渲染器初始化方法_getColorPaletteconfig获取调色板_setStylesconfig设置渲染样式,背景色、渐变因子、透明度。_prepareDatadata 数据为store已处理完成的将store处理完成的数据转换为可渲染的数据_getPointTemplateradius, 半径
blur 渐变因子根据圆半径和渐变因子确定一个点渲染的模板_drawAlphadata根据渲染的数据进行点绘制,未着色_colorize
对绘制完成的渲染数据进行着色renderPartialdata对传入的数据进行渲染renderAlldata将传入的数据作为全部数据进行渲染,即会先清除已有的渲染数据_updateGradientconfig更新渲染的渐变色,即重新设置调色板updateConfigconfig更新渲染配置信息,即更新渲染的渐变色和渲染相关样式setDimensionswidth, height设置画布宽高_clear清除画布getValueAtpoint获取一个像素点数据,包括颜色及透明度getDataURL转换热力图为图片
0 0
- 热点图heatMap.js V2.0 研究笔记
- heatmap.js v2.0 热点图插件 使用demo例子
- Heatmap.js 学习笔记
- Cal-HeatMap(热点图)使用例子
- Earthquakes Heatmap——地震热点图
- heatmap学习笔记
- Heatmap.js – 最强大的 Web 动态热图
- 研究热点
- heatmap
- Lightbox JS V2.0
- Lightbox JS v2.0
- Lightbox JS v2.0
- Lightbox JS v2.0
- Lightbox JS v2.0
- paip.2013年技术趋势以及热点 v2.0 cae
- 借用heatmap.js热力图实现
- R语言画Heatmap图
- matlab 生成热度图heatmap
- iOS开发 -- 音频的播放
- cross-site tracing XST攻击
- HDU 1792-A New Change Problem(互质数的最大不能表示数)
- su与sudo的区别与使用技巧
- php 操作 Memcache
- 热点图heatMap.js V2.0 研究笔记
- Autoconf/Automake 使用,成功执行一个c程序
- iOS 无限后台运行
- Codeforces 570E - Pig and Palindromes (DP)
- SQLite数据库文件格式全面分析
- 玩转Bootstrap(基础) (3.按钮)
- Linxu命令(3)
- 修改Images.xcassets位置后Xcode编译出错以及Xcode打不开storyboard
- SQLAlchemy 学习(二)