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 相关文章推荐
跨浏览器的设置innerHTML方法
Sep 18 Javascript
javascript的onchange事件与jQuery的change()方法比较
Sep 28 Javascript
javascript中的绑定与解绑函数应用示例
Jun 24 Javascript
原生js和jQuery随意改变div属性style的名称和值
Oct 22 Javascript
基于javascript实现浏览器滚动条快到底部时自动加载数据
Nov 30 Javascript
JavaScript动态插入CSS的方法
Dec 10 Javascript
通过修改360抢票的刷新频率和突破8车次限制实现方法
Jan 04 Javascript
详解Jquery Easyui的验证扩展
Jan 09 Javascript
详解vue模拟加载更多功能(数据追加)
Jun 23 Javascript
javascript 中模板方法单例的实现方法
Oct 17 Javascript
在Vue中实现随hash改变响应菜单高亮
Mar 09 Javascript
微信小程序实现底部弹出模态框
Nov 18 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/04/12 PHP
PHP正确配置mysql(apache环境)
2011/08/28 PHP
JSON在PHP中的应用介绍
2012/09/08 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
2014/11/04 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
2016/09/30 PHP
Laravel学习教程之路由模块
2017/08/18 PHP
从数据结构的角度分析 for each in 比 for in 快的多
2013/07/07 Javascript
用JavaScript计算在UTF-8下存储字符串占用字节数
2013/08/08 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
2015/03/01 Javascript
js+html5通过canvas指定开始和结束点绘制线条的方法
2015/06/05 Javascript
AngularJs学习第八篇 过滤器filter创建
2016/06/08 Javascript
js 获取经纬度的实现方法
2016/06/20 Javascript
关于jQuery库冲突的完美解决办法
2017/05/20 jQuery
详解angularjs 关于ui-router分层使用
2017/06/12 Javascript
微信小程序实现全国机场索引列表
2018/01/31 Javascript
JavaScript一元正号运算符示例代码
2019/06/30 Javascript
vue如何实现自定义底部菜单栏
2019/07/01 Javascript
vue+mock.js实现前后端分离
2019/07/24 Javascript
深入浅析JavaScript中的in关键字和for-in循环
2020/04/20 Javascript
Nuxt的路由配置和参数传递方式
2020/11/06 Javascript
学习python处理python编码问题
2011/03/13 Python
Python的collections模块中的OrderedDict有序字典
2016/07/07 Python
Python实现接受任意个数参数的函数方法
2018/04/21 Python
Python装饰器原理与简单用法实例分析
2018/04/29 Python
Python中读取文件名中的数字的实例详解
2020/12/25 Python
戛纳奢侈品商店:Jacques Loup法国
2019/11/04 全球购物
澳大利亚最便宜的网上药房:Chemist Warehouse
2020/01/30 全球购物
网络工程专业自荐信范文
2014/03/16 职场文书
房地产广告词大全
2014/03/19 职场文书
初三班主任寄语大全
2014/04/04 职场文书
教师民族团结演讲稿
2014/08/27 职场文书
关于十八大的演讲稿
2014/09/15 职场文书
安全教育第一课观后感
2015/06/17 职场文书
幼儿园教学反思范文
2016/03/02 职场文书
MySQL安装后默认自带数据库的作用详解
2021/04/27 MySQL