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 相关文章推荐
javascript 年月日联动实现核心代码
Dec 21 Javascript
JS获取节点的兄弟,父级,子级元素的方法
Jan 09 Javascript
javascript中关于&amp;&amp; 和 || 表达式的小技巧分享
Apr 10 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
Apr 16 Javascript
理解JavaScript事件对象
Jan 25 Javascript
jQuery实现的文字hover颜色渐变效果实例
Feb 20 Javascript
浅谈JS之tagNaem和nodeName
Sep 13 Javascript
node.js(express)中使用Jcrop进行图片剪切上传功能
Apr 21 Javascript
angular2模块和共享模块详解
Apr 08 Javascript
Vue中的组件及路由使用实例代码详解
May 22 Javascript
微信小程序后端(java)开发流程的详细步骤
Nov 13 Javascript
在vue-cli3中使用axios获取本地json操作
Jul 30 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 之入门篇
2006/12/04 PHP
QueryPath PHP 中的jQuery
2010/04/11 PHP
PHP mcrypt可逆加密算法分析
2011/07/19 PHP
利用PHP实现一个简单的用户登记表示例
2017/04/25 PHP
载入进度条 效果
2006/07/08 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
2015/12/07 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
2016/01/21 Javascript
AngularJs中route的使用方法和配置
2016/02/04 Javascript
js动态生成form 并用ajax方式提交的实现方法
2016/09/09 Javascript
JS定时器实现数值从0到10来回变化
2016/12/09 Javascript
javascript-解决mongoose数据查询的异步操作
2016/12/22 Javascript
Bootstrap禁用响应式布局的实现方法
2017/03/09 Javascript
静态页面实现 include 引入公用代码的示例
2017/09/25 Javascript
基于jquery实现左右上下移动效果
2018/05/02 jQuery
详解js删除数组中的指定元素
2018/10/31 Javascript
ES6 class的应用实例分析
2019/06/27 Javascript
移动端JS实现拖拽两种方法解析
2020/10/12 Javascript
H5 js点击按钮复制文本到粘贴板
2020/11/19 Javascript
详解Python的单元测试
2015/04/28 Python
Python3单行定义多个变量或赋值方法
2018/07/12 Python
Python操作word常见方法示例【win32com与docx模块】
2018/07/17 Python
python爬虫获取新浪新闻教学
2018/12/23 Python
用Python自动清理系统垃圾的实现
2021/01/18 Python
全球速卖通:AliExpress(国际版淘宝)
2017/09/20 全球购物
Peter Millar官网:美国高档生活服饰品牌
2018/07/02 全球购物
澳大利亚手表品牌:Time IV Change
2018/10/06 全球购物
大学生自我鉴定
2013/12/16 职场文书
车间操作工岗位职责
2013/12/19 职场文书
单位提档介绍信
2014/01/17 职场文书
领导接待方案
2014/03/13 职场文书
《三顾茅庐》教学反思
2014/04/10 职场文书
学校门卫岗位职责范本
2014/06/30 职场文书
党的群众路线教育实践活动对照检查材料(个人)
2014/09/24 职场文书
博士生专家推荐信
2015/03/25 职场文书
2015年乡镇流动人口工作总结
2015/05/12 职场文书
2015年妇委会工作总结
2015/05/22 职场文书