JS绘图Flot如何实现可选显示曲线图功能


Posted in Javascript onOctober 16, 2020

刚刚做了可以动态去刷新的曲线图,下面再来实现一个可以选择显示那个显示值的曲线图。

首先看一下效果:

JS绘图Flot如何实现可选显示曲线图功能

下面的多选框,选择以后会触发一个事件,等同与重新绘制了曲线图。

重点是需要的数据的格式,我们来看一下代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Flot可选绘图测试</title>
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="jquery.js"></script>
<script language="javascript" type="text/javascript" src="jquery.flot.js"></script>
<script type="text/javascript">
$(function () {
	// 显示的数据,注意对象格式
  var datasets = {
    "usa": {
      label: "USA",
      data: [[1988, 483994], [1989, 479060], [1990, 457648], [1991, 401949], [1992, 424705], [1993, 402375], [1994, 377867], [1995, 357382], [1996, 337946], [1997, 336185], [1998, 328611], [1999, 329421], [2000, 342172], [2001, 344932], [2002, 387303], [2003, 440813], [2004, 480451], [2005, 504638], [2006, 528692]]
    },    
    "russia": {
      label: "Russia",
      data: [[1988, 218000], [1989, 203000], [1990, 171000], [1992, 42500], [1993, 37600], [1994, 36600], [1995, 21700], [1996, 19200], [1997, 21300], [1998, 13600], [1999, 14000], [2000, 19100], [2001, 21300], [2002, 23600], [2003, 25100], [2004, 26100], [2005, 31100], [2006, 34700]]
    },
    "uk": {
      label: "UK",
      data: [[1988, 62982], [1989, 62027], [1990, 60696], [1991, 62348], [1992, 58560], [1993, 56393], [1994, 54579], [1995, 50818], [1996, 50554], [1997, 48276], [1998, 47691], [1999, 47529], [2000, 47778], [2001, 48760], [2002, 50949], [2003, 57452], [2004, 60234], [2005, 60076], [2006, 59213]]
    },
    "germany": {
      label: "Germany",
      data: [[1988, 55627], [1989, 55475], [1990, 58464], [1991, 55134], [1992, 52436], [1993, 47139], [1994, 43962], [1995, 43238], [1996, 42395], [1997, 40854], [1998, 40993], [1999, 41822], [2000, 41147], [2001, 40474], [2002, 40604], [2003, 40044], [2004, 38816], [2005, 38060], [2006, 36984]]
    },
    "denmark": {
      label: "Denmark",
      data: [[1988, 3813], [1989, 3719], [1990, 3722], [1991, 3789], [1992, 3720], [1993, 3730], [1994, 3636], [1995, 3598], [1996, 3610], [1997, 3655], [1998, 3695], [1999, 3673], [2000, 3553], [2001, 3774], [2002, 3728], [2003, 3618], [2004, 3638], [2005, 3467], [2006, 3770]]
    },
    "sweden": {
      label: "Sweden",
      data: [[1988, 6402], [1989, 6474], [1990, 6605], [1991, 6209], [1992, 6035], [1993, 6020], [1994, 6000], [1995, 6018], [1996, 3958], [1997, 5780], [1998, 5954], [1999, 6178], [2000, 6411], [2001, 5993], [2002, 5833], [2003, 5791], [2004, 5450], [2005, 5521], [2006, 5271]]
    },
    "norway": {
      label: "Norway",
      data: [[1988, 4382], [1989, 4498], [1990, 4535], [1991, 4398], [1992, 4766], [1993, 4441], [1994, 4670], [1995, 4217], [1996, 4275], [1997, 4203], [1998, 4482], [1999, 4506], [2000, 4358], [2001, 4385], [2002, 5269], [2003, 5066], [2004, 5194], [2005, 4887], [2006, 4891]]
    }
  };
	// 对象要显示的颜色,使用JQuery循环,然后为对象增加一个 color 属性
  var i = 0;
  $.each(datasets, function(key, val) {
    val.color = i;
    ++i;
  });  
  // 增加选择可显示国家的多选框
  var choiceContainer = $("#choices");
  $.each(datasets, function(key, val) {
    choiceContainer.append('<br/><input type="checkbox" name="' + key +
                '" checked="checked" id="id' + key + '">' +
                '<label for="id' + key + '">'
                + val.label + '</label>');
  });
	// 为可选框增加点击事件
  choiceContainer.find("input").click(plotAccordingToChoices); 
	// 多选框点击事件,用于移除或增加某个国家的显示
  function plotAccordingToChoices() {
    var data = [];
    choiceContainer.find("input:checked").each(function () {
			// 多选框的名字
      var key = $(this).attr("name");
			// 有该属性,并且有该属性为Key的数据,则增加到显示区
      if (key && datasets[key])
        data.push(datasets[key]);
    });
		// 如果有数据则设置数据。等同与把图形重绘了,所以移除某个国家时可以不再显示
    if (data.length > 0)
      $.plot($("#placeholder"), data, {
        yaxis: { min: 0 },
        xaxis: { tickDecimals: 0 }
      });
  }
	// 调用一次以显示某写国家的值
  plotAccordingToChoices();
});
</script>
</head>
<body>
<div id="placeholder" style="width:600px;height:300px;"></div>
<p id="choices">Show:</p>
</body>
</html>

选择某个多选框的话会显示其曲线。

以上示例来自官方并简单修改和增加了注释,希望对一些人有所帮助。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
web的各种前端打印方法之jquery打印插件jqprint实现网页打印
Jan 09 Javascript
jquery表单验证框架提供的身份证验证方法(示例代码)
Dec 27 Javascript
JS将数字转换成三位逗号分隔的样式(示例代码)
Feb 19 Javascript
director.js实现前端路由使用实例
Feb 03 Javascript
Javascript非构造函数的继承
Apr 27 Javascript
深入理解js函数的作用域与this指向
May 28 Javascript
javascript实现任务栏消息提示的简单实例
May 31 Javascript
js中常用的Tab切换效果(推荐)
Aug 30 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
Oct 10 Javascript
AngularJS实现的锚点楼层跳转功能示例
Jan 02 Javascript
p5.js入门教程之键盘交互
Mar 19 Javascript
node.js使用stream模块实现自定义流示例
Feb 13 Javascript
JS跨浏览器解析XML应用过程详解
Oct 16 #Javascript
JS实现简易图片自动轮播
Oct 16 #Javascript
JS绘图Flot如何实现动态可刷新曲线图
Oct 16 #Javascript
基于JQuery和DWR实现异步数据传递
Oct 16 #jQuery
JS绘图Flot应用图形绘制异常解决方案
Oct 16 #Javascript
swiper4实现移动端导航栏tab滑动切换
Oct 16 #Javascript
JS highcharts动态柱状图原理及实现
Oct 16 #Javascript
You might like
PHP企业级应用之常见缓存技术篇
2011/01/27 PHP
smarty简单分页的实现方法
2014/10/27 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
2015/02/16 PHP
Laravel路由研究之domain解决多域名问题的方法示例
2019/04/04 PHP
javascript中巧用“闭包”实现程序的暂停执行功能
2007/04/04 Javascript
随机显示经典句子或诗歌的javascript脚本
2007/08/04 Javascript
js弹窗代码 可以指定弹出间隔
2010/07/03 Javascript
Jquery中获取iframe的代码
2011/01/11 Javascript
Jquery $.getJSON 在IE下的缓存问题解决方法
2014/10/10 Javascript
JavaScript 随机验证码的生成实例代码
2016/09/22 Javascript
js 判断登录界面的账号密码是否为空
2017/02/08 Javascript
Vue组件全局注册实现警告框的实例详解
2018/06/11 Javascript
axios的拦截请求与响应方法
2018/08/11 Javascript
使用NestJS开发Node.js应用的方法
2018/12/03 Javascript
说说如何使用Vuex进行状态管理(小结)
2019/04/14 Javascript
如何自定义微信小程序tabbar上边框的颜色
2019/07/09 Javascript
jquery树形插件zTree高级使用详解
2019/08/16 jQuery
JS实现页面跳转与刷新的方法汇总
2019/08/30 Javascript
Vue.js实现大屏数字滚动翻转效果
2019/11/29 Javascript
JavaScript实现栈结构Stack过程详解
2020/03/07 Javascript
vue穿梭框实现上下移动
2021/01/29 Vue.js
用Python操作字符串之rindex()方法的使用
2015/05/19 Python
python字典DICT类型合并详解
2017/08/17 Python
使用celery和Django处理异步任务的流程分析
2020/02/19 Python
python re.match()用法相关示例
2021/01/27 Python
移动端HTML5 input常见问题(小结)
2020/09/28 HTML / CSS
挪威手表购物网站:Klokker
2016/09/19 全球购物
美国畅销的跑步机品牌:ProForm
2017/02/06 全球购物
在线购买廉价折扣书籍和小说:BookOutlet.com
2018/02/19 全球购物
database面试题
2013/03/28 面试题
七年级历史教学反思
2014/02/05 职场文书
幼儿园小班个人工作总结
2015/02/12 职场文书
大学生党课感想
2015/08/11 职场文书
关于教师节的广播稿
2015/08/19 职场文书
《夸父追日》教学反思
2016/02/20 职场文书
JUnit5常用注解的使用
2021/07/02 Java/Android