jQuery插件Flot学习Canvas绘制图形的原理

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

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

 代码如下 复制代码

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

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

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

 代码如下 复制代码

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

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

第一层是点坐标;

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

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

你可以看到这样的图案:

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

 代码如下 复制代码

var d1 = []; for (var i = 0; i 《 14; i += 0.5) d1.push([i, Math.sin(i)]); var d2 = [[0, 3], [4, 8], [8, 5], [9, 13]]; var d3 = []; for (var i = 0; i 《 14; i += 0.5) d3.push([i, Math.cos(i)]); var d4 = []; for (var i = 0; i 《 14; i += 0.1) d4.push([i, Math.sqrt(i * 10)]); var d5 = []; for (var i = 0; i 《 14; i += 0.5) d5.push([i, Math.sqrt(i)]); var d6 = []; for (var i = 0; i 《 14; i += 0.5 + Math.random()) d6.push([i, Math.sqrt(2*i + Math.sin(i) + 5)]); $.plot($(“#placeholder”), [ { data: d1, lines: { show: true, fill: true } }, { data: d2, bars: { show: true } }, { data: d3, points: { show: true } }, { data: d4, lines: { show: true } }, { data: d5, lines: { show: true }, points: { show: true } }, { data: d6, lines: { show: true, steps: true } } ]);

展示成如下形式:

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

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

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

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

 代码如下 复制代码

{ position: “left”, tickFormatter: KMFormatter, show: true, labelWidth: 30, show: true}

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

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

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

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

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

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

区域选取的插件;

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

时间: 2024-10-27 14:00:58

jQuery插件Flot学习Canvas绘制图形的原理的相关文章

JavaScript实现使用Canvas绘制图形的基本教程_javascript技巧

由于这两年HTML5火的正热,所以研究了一下,最近有个想法也是要用到HTML的相关功能,所以也要好好学习一把. 好好看了一下Canvas的功能,感觉HTML5在客户端交互的功能性越来越强了,今天看了一下Canvas绘图,下边是几个实例,记下以备后用. 1.使用Canvas绘制直线: <!doctype html> <html> <head> <meta charset="UTF-8"> </head> <style ty

源代码-在WPF中Canvas 绘制图形的平移、缩放

问题描述 在WPF中Canvas 绘制图形的平移.缩放 我在WPF中(C#)Canvas中画了N多条线段.圆.文字.现在我想用鼠标滚轮以鼠标指针为缩放点同时缩放Canvas中的所有图形,鼠标左键按下能同时平移所有图形.该怎么做,我写出来的缩放是以左上角为原点的,平移时会跳动. 当Canvas大小改变时整个Canvas里的图形会等比例的放大缩小. 1.缩放时Canvas大小不得改变,只是缩放图形 2.能同时支持鼠标和平板触屏操作平移缩放. 3.给源代码最好.** 谢谢各位老师 解决方案 1:了解W

分享jQuery插件的学习笔记_jquery

插件(Plugin)也成为 jQuery 扩展(Extension),是一种遵循一定规范的应用程序接口编写出来的程序.目前 jQuery 插件已超过几千种,由来自世界各地的开发者共同编写.验证和完善.而对于jQuery开发者而言,直接使用这些插件将快速稳定架构系统,节约项目成本. 一. 插件概述 插件是以 jQuery 的核心代码为基础,编写出复合一定规范的应用程序.也就是说,插件也是 jQuery 代码,通过 js 文件引入的方式植入即可. 插件的种类很多,主要大致可以分为:UI 类.表单及验

jQuery插件简单学习实例教程_jquery

本文实例讲述了jQuery插件及其用法.分享给大家供大家参考,具体如下: (1)异步分页插件flexgrid 1)前台js <%@ page language="Java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN&

在WPF中Canvas 绘制图形的平移、缩放

问题描述 我在WPF中(C#)Canvas中画了N多条线段.圆.文字.现在我想用鼠标滚轮以鼠标指针为缩放点同时缩放Canvas中的所有图形,鼠标左键按下能同时平移所有图形.改怎么做,我写出来的缩放是以左上角为原点的,平移时会跳动.当Canvas大小改变时整个Canvas里的图形会等比例的放大缩小.1.缩放时Canvas大小不得改变,只是缩放图形2.能同时支持鼠标和平板触屏操作平移缩放.3.给源代码最好.谢谢各位老师 解决方案 解决方案二:每一个图形控件,它只要修改一下缩放参数Scale就能自动化

Android编程之canvas绘制各种图形(点,直线,弧,圆,椭圆,文字,矩形,多边形,曲线,圆角矩形)_Android

本文实例讲述了Android编程之canvas绘制各种图形的方法.分享给大家供大家参考,具体如下: 1.首先说一下canvas类: Class Overview The Canvas class holds the "draw" calls. To draw something, you need 4 basic components: A Bitmap to hold the pixels, a Canvas to host the draw calls (writing into

html5使用canvas绘制时钟示例

准备工作 在HTML中指定一个区域放置时钟: <div id="clock" style="position: relative;"></div> 时钟的一些外观设定: var width = 260; // 桌布宽度 var height= 260; // 桌布高度 var dot = {     x : width / 2,     y : height / 2,     radius : 6 }; // 圆点位置.半径 var radi

如何使用HTML5的Canvas图形元素绘制图形

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 HTML5是目前HTML的最新标准.在笔者写这篇文章时,HTML5仍在积极的发展.HTML5除了提供新的标签信息外,同时还包含了新的应用程序编程接口(API),这样可以使我们能够在网页上提供更多丰富的多媒体和互动功能,而无需使用专有的插件.除了这些万维网联盟还公布了其他的相关技术,比如地理位置定位,脱机存储,档案管理等等. 在HTML5推出后

超全超实用的Javascript类库和jQuery插件大全之一:图片,地图和图形

日期:2012-10-10  来源:GBin1.com 如果你需要解决一些开发中遇到的技术问题的话,很可能会找到一些相关的javascript类库或者是jQuery插件来实现.这样实用的类库或者jQuery插件往往是你应该时常收集并且保存的,特别是如果你不希望自己去处理不同浏览器的兼容性问题的话,使用现成的javascript类库或者是jQuery插件往往能够帮助你提高开发效率. 使用javascript类库可能并不一定是最好的选择,很多情况1下可能你会发现类库加载并不正确,或者有性能上的问题,