2018-09-10 好看的图表插件

https://www.hcharts.cn/ 插件网址
不会用。。。看不懂 在网上找到了 一个好心人
这是他自己整理的 http://www.cnblogs.com/Olive116/p/3777021.html 原文地址
我搬过来 自己归纳了一下 用ajax实现了一下

使用时的注意事项: data里面的 name和value 如果要修改 连着HighChart.js里面对应的也要修改

HighChart.js

//document.write("<script language='javascript' src='/Scripts/jquery-1.11.0.min.js'></script>");//引入Jquery(1.8.0以上版本)
//document.write("<script language='javascript' src='/Statics/highcharts.js'></script>"); //引入hightcharts引擎
//document.write("<script language='javascript' src='/Statics/exporting.js'></script>"); //引入导出图片js
 
//判断数组中是否包含某个元素
Array.prototype.contains = function (obj) {
    var i = this.length;
    while (i--) {
        if (this[i] === obj) {
            return true;
        }
    }
    return false;
}
 
var HighChart = {
    ChartDataFormate: {
        FormateNOGroupData: function (data) {
            var categories = [];
            var datas = [];
            for (var i = 0; i < data.length; i++) {
                categories.push(data[i].name || "");
                datas.push([data[i].name, data[i].value || 0]);
            }
            return { category: categories, data: datas };
        },
        FormatGroupData: function (data) {//处理分组数据,数据格式:name:XXX,group:XXX,value:XXX用于折线图、柱形图(分组,堆积)
            var names = new Array();
            var groups = new Array();
            var series = new Array();
            for (var i = 0; i < data.length; i++) {
                if (!names.contains(data[i].name))
                    names.push(data[i].name);
                if (!groups.contains(data[i].group))
                    groups.push(data[i].group);
            }
            for (var i = 0; i < groups.length; i++) {
                var temp_series = {};
                var temp_data = new Array();
                for (var j = 0; j < data.length; j++) {
                    for (var k = 0; k < names.length; k++)
                        if (groups[i] == data[j].group && data[j].name == names[k])
                            temp_data.push(data[j].value);
                }
                temp_series = { name: groups[i], data: temp_data };
                series.push(temp_series);
            }
            return { category: names, series: series };
        },
        FormatBarLineData: function (data, name, name1) {//数据类型:name:XXX,value:XXX,处理结果主要用来展示X轴为日期的具有增幅的趋势的图
            var category = [];
            var series = [];
            var s1 = [];
            var s2 = [];
            for (var i = 1; i < data.length; i++) {
                if (!category.contains(data[i].name))
                    category.push(data[i].name);
                s1.push(data[i].value);
                var growth = 0;
                if (data[i].value != data[i - 1].value)
                    if (data[i - 1].value != 0)
                        growth = Math.round((data[i].value / data[i - 1].value - 1) * 100);
                    else
                        growth = 100;
                s2.push(growth);
            }
            series.push({ name: name, color: '#4572A7', type: 'column', yAxis: 1, data: s1, tooltip: { valueStuffix: ''} });
            series.push({ name: name1, color: '#89A54E', type: 'spline', yAxis: 1, data: s2, tooltip: { valueStuffix: '%'} });
            return { series: series };
        }
    },
    ChartOptionTemplates: {
        Pie: function (data, name, title) {
            var pie_datas = HighChart.ChartDataFormate.FormateNOGroupData(data);
            var option = {
                chart: {
                    plotBackgroundColor: null,
                    plotBorderWidth: null,
                    plotShadow: false
                },
                title: {
                    text: title || ''
                },
                tooltip: {
                    pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>'
                },
                plotOptions: {
                    pie: {
                        allowPointSelect: true,
                        cursor: 'pointer',
                        dataLabels: {
                            enabled: false
                        },
                        showInLegend: true
                    }
                },
                series: [{
                    type: 'pie',
                    name: name || '',
                    data: pie_datas.data
                }]
            };
            return option;
        },
        DrillDownPie: function (data, name, title) {
            var drilldownpie_datas;
            var option = {
                chart: {
                    type: 'pie'
                },
                title: {
                    text: title || ''
                },
                subtitle: {
                    text: '请点击饼图项看详细占比'
                },
                plotOptions: {
                    series: {
                        dataLabels: {
                            enabled: true,
                            format: '{point.name}: {point.y:.1f}%'
                        }
                    }
                },
                tooltip: {
                    headerFormat: '<span style="font-size:11px">{series.name}</span><br>',
                    pointFormat: '<span style="color:{point.color}">{point.name}</span>: <b>{point.y:.2f}%</b> of total<br/>'
                },
                series: [{
                    name: name || '',
                    colorByPoint: true,
                    data: drilldownpie_datas.fir_data
                }],
                drilldown: {
                    series: drilldownpie_datas.series
                }
            };
            return option;
        },
        Line: function (data, name, title) {
            var line_datas = HighChart.ChartDataFormate.FormatGroupData(data);
            var option = {
                title: {
                    text: title || '',
                    x: -20
                },
                subtitle: {
                    text: '',
                    x: -20
                },
                xAxis: {
                    categories: line_datas.category
                },
                yAxis: {
                    title: {
                        text: name || ''
                    },
                    plotLines: [{
                        value: 0,
                        width: 1,
                        color: '#808080'
                    }]
                },
                tooltip: {
                    valueSuffix: ''
                },
                legend: {
                    layout: 'horizontal',
                    align: 'center',
                    verticalAlign: 'bottom'
                },
                series: line_datas.series
            };
            return option;
        },
        Bars: function (data, is_stack, is_stack_percent, name, title) {
            var bars_datas = HighChart.ChartDataFormate.FormatGroupData(data);
            var option = {
                chart: {
                    type: 'column'
                },
                title: {
                    text: title || ''
                },
                subtitle: {
                    text: ''
                },
                credits: {
                    enabled: false
                },
                xAxis: {
                    categories: bars_datas.category
                },
                yAxis: {
                    //min: 0,
                    title: {
                        text: name
                    }
                },
                tooltip: {
                    headerFormat: '<span style="font-size:10px">{point.key}</span><table>',
                    pointFormat: '<tr><td style="color:{series.color};padding:0">{series.name};</td>' +
                        '<td style="padding:0"><b>{point.y:.1f}</b></td></tr>',
                    footerFormat: '</table>',
                    shared: true,
                    useHTML: true
                },
                plotOptions: {
                    column: {
                        pointPadding: 0.2,
                        borderWidth: 0
                    }
                },
                series: bars_datas.series
            };
            var stack_option = {};
            if (is_stack && !is_stack_percent) {
                stack_option = {
                    tooltip: {
                        formatter: function () {
                            return '<b>' + this.x + '</b><br/>' +
                        this.series.name + ': ' + this.y + '<br/>' +
                        'Total: ' + this.point.stackTotal;
                        }
                    },
                    plotOptions: {
                        column: {
                            stacking: 'normal',
                            dataLabels: {
                                enabled: true,
                                color: (Highcharts.theme && Highcharts.theme.dataLabelsColor) || 'white'
                            }
                        }
                    }
                };
            }
            if (!is_stack && is_stack_percent) {
                stack_option = {
                    tooltip: {
                        pointFormat: '<span style="color:{series.color}">{series.name}</span>: <b>{point.y}</b> ({point.percentage:.0f}%)<br/>',
                        shared: true
                    },
                    plotOptions: {
                        column: {
                            stacking: 'percent'
                        }
                    }
                };
            }
            return $.extend({}, option, stack_option);
        },
        Pyramid: function (data, name, title) {
            var pyramid_datas = HighChart.ChartDataFormate.FormateNOGroupData(data);
            var option = {
                chart: {
                    type: 'pyramid',
                    marginRight: 100
                },
                title: {
                    text: title || '',
                    x: -50
                },
                plotOptions: {
                    series: {
                        dataLabels: {
                            enabled: true,
                            format: '<b>{point.name}</b> ({point.y:,.0f})',
                            color: 'black',
                            softConnector: true
                        }
                    }
                },
                legend: {
                    enabled: false
                },
                series: [{
                    name: name || '',
                    data: pyramid_datas.data
                }]
            };
            return option;
        },
        BarLine: function (data, name, name1, title) {
            var barline_datas = HighChart.ChartDataFormate.FormatBarLineData(data);
            var option = {
                chart: {
                    zoomType: 'xy'
                },
                title: {
                    text: title || ''
                },
                subtitle: {
                    text: ''
                },
                xAxis: [{
                    categories: barline_datas.category
                }],
                yAxis: [{ // Primary yAxis
                    labels: {
                        format: '{value}',
                        style: {
                            color: '#89A54E'
                        }
                    },
                    title: {
                        text: name || '',
                        style: {
                            color: '#89A54E'
                        }
                    }
                }, { // Secondary yAxis
                    title: {
                        text: name1 || '',
                        style: {
                            color: '#4572A7'
                        }
                    },
                    labels: {
                        format: '{value}',
                        style: {
                            color: '#4572A7'
                        }
                    },
                    opposite: true
                }],
                tooltip: {
                    shared: true
                },
                legend: {
                    layout: 'horizontal',
                    align: 'center',
                    verticalAlign: 'bottom'
                },
                series: [{
                    name: 'Rainfall',
                    color: '#4572A7',
                    type: 'column',
                    yAxis: 1,
                    data: [49.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4],
                    tooltip: {
                        valueSuffix: ' mm'
                    }
 
                }, {
                    name: 'Temperature',
                    color: '#89A54E',
                    type: 'spline',
                    data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6],
                    tooltip: {
                        valueSuffix: '°C'
                    }
                }]
 
 
 
 
            };
        }
    },
    RenderChart: function (option, container) {
        container.highcharts(option);
    }
};

具体的页面展示
饼 图

<!-- 饼 图 饼 图 饼 图 饼 图 -->
<script src="../Scripts/jquery-1.11.0.min.js" type="text/javascript"></script>

<script src="../Statics/highcharts.js" type="text/javascript"></script>

<script src="../Statics/exporting.js" type="text/javascript"></script>

<script src="../Statics/HighChart.js" type="text/javascript"></script>

<script type="text/javascript">

   $(function () {

       var data = [

       { name: 'olive', value: 116 }, 

       { name: 'momo', value: 115 }, 

       { name: 'only', value: 222 }, 

       { name: 'for', value: 324}

       ];

       var opt = HighChart.ChartOptionTemplates.Pie(data,'Love-Rate',"饼图示例");

       var container = $("#container");

       HighChart.RenderChart(opt, container);

   });

</script>

折线图

<script src="../Scripts/jquery-1.11.0.min.js" type="text/javascript"></script>

   <script src="../Statics/highcharts.js" type="text/javascript"></script>

   <script src="../Statics/exporting.js" type="text/javascript"></script>

   <script src="../Statics/HighChart.js" type="text/javascript"></script>

   <script type="text/javascript">

       $(function () {

           var data = [

           { name: '2013-01', group: 'olive', value: 116 },

           { name: '2013-01', group: 'momo', value: 115 },

           { name: '2013-01', group: 'only', value: 222 },

           { name: '2013-01', group: 'for', value: 324 },

           { name: '2013-02', group: 'olive', value: 156 },

           { name: '2013-02', group: 'momo', value: 185 },

           { name: '2013-02', group: 'only', value: 202 },

           { name: '2013-02', group: 'for', value: 34 },

           { name: '2013-03', group: 'olive', value: 16 },

           { name: '2013-03', group: 'momo', value: 51 },

           { name: '2013-03', group: 'only', value: 22 },

           { name: '2013-03', group: 'for', value: 84 }

           ];

           var opt = HighChart.ChartOptionTemplates.Line(data, 'Love-Rate', "折线图示例");

           var container = $("#container");

           HighChart.RenderChart(opt, container);

       });

   </script>

柱形图

<script src="../Scripts/jquery-1.11.0.min.js" type="text/javascript"></script>

   <script src="../Statics/highcharts.js" type="text/javascript"></script>

   <script src="../Statics/exporting.js" type="text/javascript"></script>

   <script src="../Statics/HighChart.js" type="text/javascript"></script>

   <script type="text/javascript">

       $(function () {

           var data = [
           { name: '2013-01', group: 'olive', value: 116 },
           { name: '2013-01', group: 'momo', value: 115 },
           { name: '2013-01', group: 'only', value: 222 },
           { name: '2013-01', group: 'for', value: 324 },
           { name: '2013-02', group: 'olive', value: 156 },
           { name: '2013-02', group: 'momo', value: 185 },
           { name: '2013-02', group: 'only', value: 202 },
           { name: '2013-02', group: 'for', value: 34 },
           { name: '2013-03', group: 'olive', value: 16 },
           { name: '2013-03', group: 'momo', value: 51 },
           { name: '2013-03', group: 'only', value: 22 },
           { name: '2013-03', group: 'for', value: 84 }
           ];
           var opt = HighChart.ChartOptionTemplates.Bars(data, '','','Love-Rate', "分组柱形图示例");
           var container = $("#container");
           HighChart.RenderChart(opt, container);
           var opt1 = HighChart.ChartOptionTemplates.Bars(data, true,'','Love-Rate', "堆积柱形图示例");
           var container1 = $("#container1");
           HighChart.RenderChart(opt1, container1);
           var opt2 = HighChart.ChartOptionTemplates.Bars(data, '',true ,'Love-Rate', "堆积百分比柱形图示例");
           var container2 = $("#container2");
           HighChart.RenderChart(opt2, container2);
       });
   </script>

折线图实例
很奇怪的事
HTML视图页面的名字叫 index.html controller里面没有这个index方法
ajax 请求devTraDynamic 这个方法 然后ajaxReturn 就好了 柱状图也是这样的做法

<div id="containers" style="min-width:300px;height:400px"></div>
      <script type="text/javascript">

       $(function () {
          function test () {
              $.ajax({
                  type:"post",
                  async:false,
                  url:'{:U("Tra/devTraDynamic")}',
                  data:{},
                  dataType:"json",
                  success:function(res){
                      console.log(res);
                      var data = res;
                      var opt = HighChart.ChartOptionTemplates.Line(res, '经过人数', "人流监测图");
                      var container = $("#containers");
                      HighChart.RenderChart(opt, container);

                  }
              });

              setTimeout(test, 60000);
          }
          test();
       });

   </script>

$result数据格式如下 value指向的值 必须为整数型 即不带单引号 折线图柱状图都是一样

<?php
/**
    * 设备附近人流量动态图
    * @return   json
    */
  public function devTraDynamic()
  {
      $sql = 
          'SELECT 
              count(t.mac) AS value,
              FROM_UNIXTIME(UNIX_TIMESTAMP((FLOOR(FROM_UNIXTIME(t.col_time) / 100) * 100))) AS name
          FROM 
          (
              SELECT 
                  col_time, 
                  mac
              FROM '.C('DB_NAME_PREFIX').'devices_tra'.' 
              WHERE 
                  col_time BETWEEN UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 HOUR)) AND UNIX_TIMESTAMP(NOW())
              GROUP BY 
                  mac
          ) AS t 
          GROUP BY FLOOR(FROM_UNIXTIME(t.col_time) / 100) * 100
          ORDER BY t.col_time ASC';
      $result = M()->query($sql);
      foreach ($result as $key => $val) {
          $result[$key]['value'] = (int)($val['value']);
          $result[$key]['name'] = strrchr(($val['name']),' ');
          // strrchr() 函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。
      }
      $this->ajaxReturn($result);
             // $result数据格式如下 value指向的值 必须为整数型 即不带单引号
             // $result = array(
                  // array('value'=>12,'name'=>'12:00:00'),
                  // array('name'=>'12:01:00','value'=>22),
                  // array('name'=>'12:02:00','value'=>13),
                  // array('name'=>'12:03:00','value'=>20),
                  // array('name'=>'12:04:00','value'=>34),
                  // array('name'=>'12:05:00','value'=>23),
                  / array('name'=>'12:24:00','value'=>12)
              // ); 
   }
?>

柱状图实例

<div id="containerY" style="min-width:300px;height:400px"></div>
  <script type="text/javascript">
       $(function () { alert(666);
          function test () {
              $.ajax({
                  type:"post",
                  async:false,
                  url:'{:U("Now/devTraDynamic")}',
                  data:{},
                  dataType:"json",
                  success:function(res){
                      console.log(res);
                      var data = res;
                      var opt = HighChart.ChartOptionTemplates.Bars(data, '','','Love-Rate', "分组柱形图示例");
                      var container = $("#containerY");
                      HighChart.RenderChart(opt, container);
                  }
              });
              setTimeout(test, 86400000);
          }
          test();
       });

   </script>
public function devTraDynamic() {

       $pasttime = strtotime("-1 day"); // 当前时间的前24个小时
       $presenttime = time(); // 当前时间
       $sql = " SELECT 
                   HOUR(FROM_UNIXTIME(col_time)) as name, 
                   AVG(aqi) as value
               FROM  ped_devices_env
               WHERE  col_time BETWEEN $pasttime AND $presenttime
               GROUP BY HOUR( FROM_UNIXTIME(col_time))";
       $result = M()->query($sql); 
       foreach ($result as $key => $val) {
           $result[$key]['name'] = $val['name'].':00';
           $result[$key]['group'] = '空气质量 aqi';
           $result[$key]['value'] = (int)($val['value']);
       }
       file_put_contents('./Application/Runtime/sqlyz123.txt', var_export($result ,true));
       $this->ajaxReturn($result);

   }
   // $result 的数据结构 同样的是 value只能是整数类型 不带单引号的那种 不然图显示不出来的
   public function alldata() {
      $data = array(
                  array('name'=>'9-3','group'=>'空气质量','value'=>12),
                  array('name'=>'9-4','group'=>'空气质量','value'=>121),
                  array('name'=>'9-5','group'=>'空气质量','value'=>124),
                  array('name'=>'9-6','group'=>'空气质量','value'=>145),
                  array('name'=>'9-7','group'=>'空气质量','value'=>65)
              );
      $this->ajaxReturn($data);
   }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,252评论 6 516
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,886评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,814评论 0 361
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,869评论 1 299
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,888评论 6 398
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,475评论 1 312
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,010评论 3 422
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,924评论 0 277
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,469评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,552评论 3 342
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,680评论 1 353
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,362评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,037评论 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,519评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,621评论 1 274
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,099评论 3 378
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,691评论 2 361

推荐阅读更多精彩内容