jQuery插件Flot的介绍

开发 前端
Flot采用Canvas绘制图形(Web总共就有三种常见方式来绘制图形,不了解的同学请看这篇文章),在数据量非常大的时候,你需要考虑浏览器端的性能问题。顺便提一句,D3是采用SVG来绘制图形的,从我自己的体会来说,对于拖动图来说,SVG会比较流畅。

Flot介绍 

最近在项目里面要用到JavaScript来绘制图表,JQuery的插件Flot是一个不错的选择。和我之前介绍过的D3不同,它的唯一目的就是用来绘制曲线图的,即便是它的不同插件的功能,也基本上都在这个范畴之内。

Flot采用Canvas绘制图形(Web总共就有三种常见方式来绘制图形,不了解的同学请看这篇文章),在数据量非常大的时候,你需要考虑浏览器端的性能问题。顺便提一句,D3是采用SVG来绘制图形的,从我自己的体会来说,对于拖动图来说,SVG会比较流畅。

首先介绍一下数据的格式。数据来自一个数组嵌套的JSON格式,如:

  1. [[0, 3], [4, 8], [8, 5], [9, 13]] 

这就给定了一个二维图上供绘制连线的几个点。

数据可以直接通过API传给Flot,让它自行决定数据展示的样子:

  1. $(function () {  
  2.     var d1 = [];  
  3.     for (var i = 0; i < 14; i += 0.5)  
  4.         d1.push([i, Math.sin(i)]);  
  5.     var d2 = [[0, 3], [4, 8], [8, 5], [9, 13]];  
  6.     // a null signifies separate line segments  
  7.     var d3 = [[0, 12], [7, 12], null, [7, 2.5], [12, 2.5]];  
  8.        
  9.     $.plot($("#placeholder"), [ d1, d2, d3 ]);  
  10. }); 

这是官网上的例子,代码很简洁。从数据上看,其实是三层数组嵌套:

第一层是点坐标;

第二层是同一条线内的点序列;

第三层是不同的线的排列。

你可以看到这样的图案:

Flot介绍

你也可以在数组的第三层,给定一种被称为“series”的对象,而不是单纯的数据,来指定你想要的线条的展示形式,如:

  1. var d1 = [];  
  2. for (var i = 0; i < 14; i += 0.5)  
  3.     d1.push([i, Math.sin(i)]);  
  4.    
  5. var d2 = [[0, 3], [4, 8], [8, 5], [9, 13]];  
  6.    
  7. var d3 = [];  
  8. for (var i = 0; i < 14; i += 0.5)  
  9.     d3.push([i, Math.cos(i)]);  
  10.    
  11. var d4 = [];  
  12. for (var i = 0; i < 14; i += 0.1)  
  13.     d4.push([i, Math.sqrt(i * 10)]);  
  14.    
  15. var d5 = [];  
  16. for (var i = 0; i < 14; i += 0.5)  
  17.     d5.push([i, Math.sqrt(i)]);  
  18.    
  19. var d6 = [];  
  20. for (var i = 0; i < 14; i += 0.5 + Math.random())  
  21.     d6.push([i, Math.sqrt(2*i + Math.sin(i) + 5)]);  
  22.                        
  23. $.plot($("#placeholder"), [  
  24.     {  
  25.         data: d1,  
  26.         lines: { show: true, fill: true }  
  27.     },  
  28.     {  
  29.         data: d2,  
  30.         bars: { show: true }  
  31.     },  
  32.     {  
  33.         data: d3,  
  34.         points: { show: true }  
  35.     },  
  36.     {  
  37.         data: d4,  
  38.         lines: { show: true }  
  39.     },  
  40.     {  
  41.         data: d5,  
  42.         lines: { show: true },  
  43.         points: { show: true }  
  44.     },  
  45.     {  
  46.         data: d6,  
  47.         lines: { show: true, steps: true }  
  48.     }  
  49. ]); 

展示成如下形式:

Flot介绍

关于线条类型,总共有line、point、bar这三种类型可以选,当然也可以是这三种类型的组合。

对于不同坐标轴(axes)和不同坐标单位的展示,例如里面横轴表示时间,格式“yyyy/mm/dd”这样的,纵轴表示行驶的里程,格式是“xxx (km)”这样的,解决这样的问题,你需要做的是:

首先需要把所有数据数值化,就是变成纯粹的整形或者浮点型的数值,这样Flot才能识别数据的格式,例如时间就变成毫秒数,里程就变成千米数;

再自定义坐标轴展示的callback函数。例如:

  1. { position: "left", tickFormatter: KMFormatter, show: true, labelWidth: 30, show: true

Flot是支持多x轴或者多y轴的,在这种情况下,series中只要指定了数据对应的坐标轴的序号,就可以实现多轴效果:

Flot介绍

还有两个概念需要提及,一个是“legend”,就是展示在图中(比如上图中的左下角)或者图外面的图示,用来标识图中不同颜色的线分别表示什么含义;还有一个叫做“grid”,就是图中的网格,也包括坐标轴的刻度和图形的边框。

核心的概念就是这些,Flot的API设计得很简洁,所以需要额外学习的东西也很少,马上就可以上手使用。

具体的信息,可以阅读它的官方API文档,这非常有用;但是还有很多信息,是需要阅读源码获得的(特别是它的许多插件都是没有什么文档的),源代码写得很清楚。

比较有用的插件包括这几个:

支持图像拖拽和图像缩放的插件,这两者合并起来就可以实现像Google地图一样的功能了;

区域选取的插件

还有这个:Cross Hair,可以在图像的鼠标位置上显示一条位置竖线,便于比较相应的数值。

这些直观的例子都可以在这里找到。

原文链接:http://www.raychase.net/1119

【编辑推荐】

  1. 2012年度最佳jQuery插件揭晓
  2. 6个类似书本翻页效果的jQuery插件
  3. 免费 jQuery UI 主题集合
  4. 时尚jQuery焦点广告插件
  5. JQuery Tree插件——zTree v3.5.01版发布
责任编辑:张伟 来源: 四火的唠叨的博客
相关推荐

2013-12-02 14:53:20

jQuery插件

2011-03-21 13:10:14

Nagios插件

2012-05-10 13:45:45

jQuery

2013-12-02 15:36:17

jQuery插件

2013-12-02 15:43:05

jQuery插件

2012-04-25 09:43:43

jQuery插件

2013-12-02 15:31:37

jQuery插件

2012-04-16 09:19:03

jQuery插件

2009-06-24 10:58:21

jQuery插件教程

2013-03-20 13:21:51

jQueryjQuery插件

2013-12-02 15:10:56

jQuery插件

2013-12-02 15:21:30

jQuery插件

2012-04-24 10:36:08

jQuery插件

2012-07-16 14:32:03

jQuery

2012-03-29 09:27:49

WEBjQuery

2011-08-01 08:51:12

jQuery Mobi插件

2013-10-09 10:00:35

JQueryJQuery插件

2011-08-25 09:30:22

2012-05-22 01:45:58

JavaScriptCSSXML

2012-12-18 09:49:57

jQueryJavaScriptJS
点赞
收藏

51CTO技术栈公众号