• jquery flotcharts使用简介


    flotcharts是一个基于jquery的,使用Canvas画HTML图表的js库。

    它的使用很简单,一般情况下只要下载它的zip包,然后看它的那几个例子就知道该怎么做了,更高级一点的,可以参考一下它的文档。在我们项目的使用中,主要花了一点功夫的地方是如何让它能正确地处理和显示时间数据。

    一般来说,flotcharts的使用是这样的。首先,要在页面上加上对IE 8以下Canvas的支持,然后,再加上jquery与jquery.plot的js,就像这样:

    <!--[if lte IE 8]><script src="../js/excanvas.min.js"></script><![endif]-->
    <script src="../js/jquery.js"></script>
    <script src="../js/jquery.flot.js"></script>

    接着,就是在页面上加上对应的代码,读取数据画图:

    function draw_plot(data) {
      var d = [];
      for(var i=0; i<data.length; i++)
        d.push([i, data[i]]);
    
      $.plot($('#placeholder'),
        [{data: d, label: '测试数据'}],
        {
          series: {lines: {show: true}}
        }
      );
    }

    当然,上面代码中的data是一个数组,其中每个元素都是数字类型。下面是对应的图表。

    flotcharts简单效果

    在大部分时候,我们还需要悬浮特效,也就是要在用户把鼠标移到数据点上的时候飘出一个小浮层来,用来显示当前用户鼠标下方数据点的具体数据,这个时候,我们需要在调用plot的时候传入相应的参数,而且处理对应的鼠标悬浮事件,如下所示(鼠标悬浮的代码都是从flotcharts样例中的interacting.html页面代码里复制的):

    function show_tooltip(x, y, contents) {
      $('<div id="tooltip">' + contents + '</div>').css( {
        position: 'absolute',
        display: 'none',
        top: y + 5,
        left: x + 5,
        border: '1px solid #fdd',
        padding: '2px',
        'background-color': '#fee',
        opacity: 0.80
      }).appendTo("body").fadeIn(200);
    }
    
    function draw_plot(data) {
      var d = [];
      for(var i=0; i<data.length; i++)
        d.push([i, data[i]]);
    
      $.plot($('#placeholder'),
        [{data: d, label: '测试数据'}],
        {
          series: {
            lines: {show: true},
            points: {show: true}
          },
          grid: { hoverable: true }
        }
      );
    
      var previousPoint = null;
      $("#placeholder").bind("plothover", function (event, pos, item) {
        if (item) {
          if (previousPoint != item.dataIndex) {
            previousPoint = item.dataIndex;
    
            $("#tooltip").remove();
            var x = item.datapoint[0], y = item.datapoint[1];
                    
            show_tooltip(item.pageX, item.pageY,
              item.series.label + "[" + x + "] : " + y);
          }
        }
        else {
          $("#tooltip").remove();
          previousPoint = null;            
        }
      });
    }

    经过这些处理以后得到的图是这样的:

    flotcharts鼠标悬浮效果

    最后就是要让flotcharts能正确显示时间了,主要是需要在横轴上做一些处理。在flotcharts的plot的 第三个参数支持使用mode参数,将其设置为time即可显示出日期/时间来,但是这个显示出来的时间是英文的,例如Nov 12之类的,对我们来说就不那么方便了。其实,由于flotcharts只是将横轴数据当做数字来处理,而且又提供了格式化显示横轴数据的接口,因此,我 们完全可以传入一个Date对象的getTime()值,然后再使用自定义横轴数据显示接口,将其转化为我们希望的格式。如下例所示:

    function show_tooltip(x, y, contents) {
      $('<div id="tooltip">' + contents + '</div>').css( {
        position: 'absolute',
        display: 'none',
        top: y + 5,
        left: x + 5,
        border: '1px solid #fdd',
        padding: '2px',
        'background-color': '#fee',
        opacity: 0.80
      }).appendTo("body").fadeIn(200);
    }
    
    function draw_plot(data) {
      var start_time = new Date().getTime() - 1000*3600*24*data.length;
      var d = [];
      for(var i=0; i<data.length; i++)
        d.push([start_time + i*1000*3600*24, data[i]]);
    
      $.plot($('#placeholder'),
        [{data: d, label: '测试数据'}],
        {
          series: {
            lines: {show: true},
            points: {show: true}
          },
          grid: { hoverable: true },
          xaxis: { tickFormatter: function(n, o) {var d = new Date(); d.setTime(n); return (d.getMonth()+1) + "-" + d.getDate();}}
        }
      );
    
      var previousPoint = null;
      $("#placeholder").bind("plothover", function (event, pos, item) {
        if (item) {
          if (previousPoint != item.dataIndex) {
            previousPoint = item.dataIndex;
    
            $("#tooltip").remove();
            var x = new Date(), y = item.datapoint[1];
            x.setTime(item.datapoint[0]);
            show_tooltip(item.pageX, item.pageY,
              item.series.label + "[" + x.getFullYear() + "-" + (x.getMonth()+1) + "-" + x.getDate() + "] : " + y);
          }
        }
        else {
          $("#tooltip").remove();
          previousPoint = null;            
        }
      });
    }

    这次做完以后,可以得到显示日期的图表了。如下图所示:

    flotcharts显示日期数据效果

    其他的效果都可以参见flotcharts的文档和例子了,这里就不说了。

    2015.1.16附注:

    上面代码对时间数据的处理过于简单,x轴数据过大貌似会造成flotcharts在后面数据点的横坐标偏差较大,更好的方法参见这篇文章

  • 相关阅读:
    【JAVA】【集合12】Java中的TreeMap
    【JAVA】【集合11】Java中的HashMap
    【JAVA】【集合10】Java中的Map接口
    main.c:24:22: fatal error: pk11func.h: No such file or directory
    C语言——随笔の想啥说啥(待续)
    大华摄像头报警接口中图片加密,python调用c++方式实现解密
    win10 下安卓源码同步小技巧
    repo sync error: .repo/manifests/: contains uncommitted changes
    Pycharm连接远程Linux服务器的虚拟环境
    利用 Django 动态展示 Pyecharts 图表数据的几种方法
  • 原文地址:https://www.cnblogs.com/dsphper/p/4228089.html
Copyright © 2020-2023  润新知