基础知识

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > 基础知识 > JavaScript图表highcharts

JavaScript图表插件highcharts详解

作者:springsnow

本文详细讲解了JavaScript图表插件highcharts的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一、Highcharts

Highcharts 非商业免费,商业需授权,代码开源。兼容 IE6。

Highcharts 底层为svg,方便自己定制,但图表类型有限。

svg特点:

Highcharts 是一个用纯 JavaScript 编写的一个图表库, 能够很简单便捷的在 Web 网站或是 Web 应用程序添加有交互性的图表,并且免费提供给个人学习、个人网站和非商业用途使用。

Highcharts 支持的图表类型有直线图、曲线图、区域图、柱状图、饼状图、散状点图、仪表图、气泡图、瀑布流图等多达 20 种图表,其中很多图表可以集成在同一个图形中形成混合图。

访问 highcharts.com 下载 Highcharts 包。

二、1 分钟上手 Highcharts

引入 Highcharts

Highcharts 最基本的运行只需要一个 JS 文件,即 highcharts.js,以使用 CDN 文件为例,对应的代码是:

<script src="http://cdn.highcharts.com.cn/highcharts/highcharts.js"></script>

创建一个简单的图表

在绘图前我们需要为 Highcharts 准备一个 DOM 容器,并指定其大小

<div id="container" style="width: 600px;height:400px;"></div>

然后通过 Highcharts 的初始化函数 Highcharts.chart 来创建图表,该函数接受两个参数,第一个参数是 DOM 容器的 Id,第二个参数是图表配置,代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>第一个 Highcharts 图表</title>
</head>
<body>
     图表容器 DOM 
    <div id="container" style="width: 600px;height:400px;"></div>
     引入 highcharts.js 
    <script src="http://cdn.highcharts.com.cn/highcharts/highcharts.js"></script>
    <script>
        // 图表配置
        var options = {
            chart: {
                type: 'bar'                          //指定图表的类型,默认是折线图(line)
            },
            title: {
                text: '我的第一个图表'                 // 标题
            },
            xAxis: {
                categories: ['苹果', '香蕉', '橙子']   // x 轴分类
            },
            yAxis: {
                title: {
                    text: '吃水果个数'                // y 轴标题
                }
            },
            series: [{                              // 数据列
                name: '小明',                        // 数据列名
                data: [1, 0, 4]                     // 数据
                   }, {
                name: '小红',
                data: [5, 7, 3]
            }]
        };
        // 图表初始化函数
        var chart = Highcharts.chart('container', options);
    </script>
</body>
</html>

这样你的第一个图表就诞生了!

1、调用远程数据

通过这个简单的例子,我们将学会如何配置基本的参数(options),然后通过一个Ajax调用远程数据以及解析数据,最后通过合适的格式展现出来

一个外部的仅包含数据的CSV文件'data.csv'(数据源)。 
Categories,Apples,Pears,Oranges,Bananas 
John,8,4,6,5 
Jane,3,4,2,3 
Joe,86,76,79,77 
Janet,3,16,13,15

var options = {
     chart: {
         renderTo: 'container',
         defaultSeriesType: 'column'
     },
     title: {
         text: 'Fruit Consumption'
     },
     xAxis: {
         categories: []
     },
     yAxis: {
         title: {
             text: 'Units'
         }
     },
     series: []
 };

$.get('data.csv', function(data) {
     // Split the lines
     var lines = data.split('\n');
     
     // Iterate over the lines and add categories or series
     $.each(lines, function(lineNo, line) {
         var items = line.split(',');
         
         // header line containes categories
         if (lineNo == 0) {
             $.each(items, function(itemNo, item) {
                 if (itemNo > 0) options.xAxis.categories.push(item);
            });
         }
         
         // the rest of the lines contain data with their name in the first position
         else {
             var series = {
                 data: []
             };
             $.each(items, function(itemNo, item) {
                 if (itemNo == 0) {
                     series.name = item;
                 } else {
                     series.data.push(parseFloat(item));
                 }
             });
             
             options.series.push(series);
     
         }
         
     });
     
     // Create the chart
     var chart = new Highcharts.Chart(options);
 });

2、使用JQuery结合HIghcharts实现从后台获取JSON实时刷新图表

$(function(){  
                 //声明报表对象  
        var chart = new Highcharts.Chart({  
            chart: {  
                //将报表对象渲染到层上  
            renderTo: 'container'  
        },  
                //设定报表对象的初始数据  
        series: [{  
            data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]          
        }]  
    });  
  
        function getForm(){  
                                                //使用JQuery从后台获取JSON格式的数据  
            jQuery.getJSON('http://localhost:8080/JQueryPIC/ajax', null, function(data) {  
                                                                //为图表设置值  
                chart.series[0].setData(data);  
            });  
        }  
  
      
        $(document).ready(function() {  
            //每隔3秒自动调用方法,实现图表的实时更新  
            window.setInterval(getForm,3000);   
              
        });  
      
  
    });

3、活动图(Live Charts)

建立服务器。在这个例子中,我们服务器脚本语言返回包含时间(time)以及y值(y value)的javascript数组。

var chart; // global
/**
 * Request data from the server, add it to the graph and set a timeout to request again
 */
function requestData() {
    $.ajax({
        url: 'live-server-data.php',
        success: function(point) {
            var series = chart.series[0],
                shift = series.data.length > 20; // shift if the series is longer than 20

            // add the point
            chart.series[0].addPoint(point, true, shift);
            
            // call it again after one second
            setTimeout(requestData, 1000);    
        },
        cache: false
    });
}
$(document).ready(function() {
    chart = new Highcharts.Chart({
        chart: {
            renderTo: 'container',
            defaultSeriesType: 'spline',
            events: {
                load: requestData
            }
        },
        title: {
            text: 'Live random data'
        },
        xAxis: {
            type: 'datetime',
            tickPixelInterval: 150,
            maxZoom: 20 * 1000
        },
        yAxis: {
            minPadding: 0.2,
            maxPadding: 0.2,
            title: {
                text: 'Value',
                margin: 80
            }
        },
        series: [{
            name: 'Random data',
            data: []
        }]
    });        
});

三、Highcharts 基本组成

四、配置选项

1、参数配置(属性+事件)

2、Chart:图表区选项

Chart图表区选项用于设置图表区相关属性。

3、Color:颜色选项

Color颜色选项用于设置图表的颜色方案。

Highcharts已经默认提供了多种颜色方案,当要显示的图形多于颜色种类时,多出的图形会自动从第一种颜色方案开始选取。自定义颜色方案的方法:

Highcharts.setOptions({
    colors: ['#058DC7', '#50B432', '#ED561B', '#DDDF00', '#24CBE5', '#64E572', '#FF9655','#FFF263', '#6AF9C4']
});

4、Title:标题选项,Subtitle:副标题选项

Title标题选项用于设置图表的标题相关属性。

副标题提供的属性选项与标题title大致相同,可参照标题选项,值得一提的是副标题的text选项默认为'',即空的,所以默认情况下副标题不显示。

var title = {
  text: '月平均气温'   
};


var subtitle = {
  text: 'Source: runoob.com'
};

5、xAxis:X轴选项,yAxis:Y轴选项

X轴选项用于设置图表X轴相关属性。

Y轴选项与上述xAxis选项基本一致,请参照上表中的参数设置,不再单独列出。

var xAxis = {
   categories: ['一月', '二月', '三月', '四月', '五月', '六月'
      ,'七月', '八月', '九月', '十月', '十一月', '十二月']
};


var yAxis = {
   title: {
      text: 'Temperature (\xB0C)'
   },
   plotLines: [{
      value: 0,
      width: 1,
      color: '#808080'
   }]
};

6、Series:数据列选项

数据列选项用于设置图表中要展示的数据相关的属性。

var series =  [
   {
      name: 'Tokyo',
      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]
   }, 
   {
      name: 'New York',
      data: [-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 
         24.1, 20.1, 14.1, 8.6, 2.5]
   }, 
   {
      name: 'Berlin',
      data: [-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 
         17.9, 14.3, 9.0, 3.9, 1.0]
   }, 
   {
      name: 'London',
      data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 
         16.6, 14.2, 10.3, 6.6, 4.8]
   }
];

7、plotOptions:数据点选项

plotOptions用于设置图表中的数据点相关属性。plotOptions根据各种图表类型,其属性设置略微有些差异,现将常用选项列出来。

8、Tooltip:数据点提示框

Tooltip用于设置当鼠标滑向数据点时显示的提示框信息。

var tooltip = {
   valueSuffix: '\xB0C'
}

9、Legend:图例选项

legend用于设置图例相关属性。

var legend = {
   layout: 'vertical',
   align: 'right',
   verticalAlign: 'middle',
   borderWidth: 0
};

更多详细信息请参照highcharts官网英文文档:http://api.highcharts.com/highcharts

四、曲线图

1、基础曲线图

var title = {
      text: '城市平均气温'   
   };
   var subtitle = {
      text: 'Source: runoob.com'
   };
   var xAxis = {
      categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun','Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
   };
   var yAxis = {
      title: {
         text: 'Temperature (\xB0C)'
      },
      plotLines: [{
         value: 0,
         width: 1,
         color: '#808080'
      }]
   };   

   var tooltip = {
      valueSuffix: '\xB0C'
   }

   var legend = {
      layout: 'vertical',
      align: 'right',
      verticalAlign: 'middle',
      borderWidth: 0
   };

   var series =  [
      {
         name: 'Tokyo',
         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]
      }, 
      {
         name: 'New York',
         data: [-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8,   24.1, 20.1, 14.1, 8.6, 2.5]
      },
      {
         name: 'London',
         data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0,  16.6, 14.2, 10.3, 6.6, 4.8]
      }
   ];

   var json = {};

   json.title = title;
   json.subtitle = subtitle;
   json.xAxis = xAxis;
   json.yAxis = yAxis;
   json.tooltip = tooltip;
   json.legend = legend;
   json.series = series;

   $('#container').highcharts(json);
});

2、带有数据标签曲线图表

var plotOptions = {
      line: {
         dataLabels: {
            enabled: true
         },   
         enableMouseTracking: false
      }
   };

3、异步加载数据曲线图表

var title = {
      text: 'Daily visits at www.highcharts.com'   
   };
var subtitle = {
      text: 'Source: Google Analytics'
   };
var xAxis = {
      tickInterval: 7 * 24 * 3600 * 1000, // 以每周为间隔设置 X 轴:one week
      tickWidth: 0,
      gridLineWidth: 1,
      labels: {
         align: 'left',
         x: 3,
         y: -3
      }
   };

   //以每周为间隔设置 Y 轴:
   //配置两个 Y 轴:
var yAxis = [{ // 左边 Y 轴
         title: {
            text: null
         },
         labels: {
            align: 'left',
            x: 3,
            y: 16,
            format: '{value:.,0f}'
         },
         showFirstLabel: false
      },{ // 右边 Y 轴
         linkedTo: 0,
         gridLineWidth: 0,
         opposite: true,
         title: {
            text: null
         },
         labels: {
            align: 'right',
            x: -3,
            y: 16,
            format: '{value:.,0f}'
         },
         showFirstLabel: false
      }
   ];   

   var tooltip = {
      shared: true,
      crosshairs: true
   }

   var legend = {
      align: 'left',
      verticalAlign: 'top',
      y: 20,
      floating: true,
      borderWidth: 0
   };

   var plotOptions = { //plotOptions用于设置图表中的数据点相关属性。
      series: {
         cursor: 'pointer',
         point: {
            events: {
               click: function (e) {
                  hs.htmlExpand(null, {
                     pageOrigin: {
                        x: e.pageX || e.clientX,
                        y: e.pageY || e.clientY
                     },
                     headingText: this.series.name,
                     maincontentText: Highcharts.dateFormat('%A, %b %e, %Y', this.x)   + ':
 ' + this.y + ' visits',
                     width: 200
                  });
               }
            }
         },
         marker: {
            lineWidth: 1
         }
      }
   }
   
   var series =  [{
         name: 'All visits',
         lineWidth: 4,
         marker: {
            radius: 4
         }
      }, {
         name: 'New visitors'
      }]

   var json = {};

   json.title = title;
   json.subtitle = subtitle;
   json.xAxis = xAxis;
   json.yAxis = yAxis;
   json.tooltip = tooltip;
   json.legend = legend;
   json.series = series;
   json.plotOptions = plotOptions;
   
   $.getJSON('http://www.highcharts.com/samples/data/jsonp.php?filename=analytics.csv&callback=?', function (csv) {
      var data = {
         csv: csv
      };
      json.data = data;
      $('#container').highcharts(json);
   });   
});

返回的文件内容:

callback("# ----------------------------------------\n 
# highcharts.com\n# Audience Overview\n# 20171217-20180117\n 
# ----------------------------------------\n 
Day Index,Users,Sessions\n 
12/18/17,\"40,585\",\"48,351\"\n 
12/19/17,\"43,039\",\"51,499\"\n 
........

12/20/17,\"44,926\",\"53,359\"\n 
1/17/18,\"41,840\",\"50,285\" 
");

4、基于时间的,可缩放的曲线图表

var chart = {
      zoomType: 'x'
   }; 
   var title = {
      text: 'USD to EUR exchange rate from 2006 through 2008'   
   };
   var subtitle = {
      text: document.ontouchstart === undefined ?
                    'Click and drag in the plot area to zoom in' :
                    'Pinch the chart to zoom in'
   };
   var xAxis = {
      type: 'datetime',
      minRange: 14 * 24 * 3600000 // 14 天
   };
   var yAxis = {
      title: {
         text: 'Exchange rate'
      }
   };
   var legend = {
      enabled: false 
   };
   var plotOptions = {
      area: {
         fillColor: {
            linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1},
            stops: [
               [0, Highcharts.getOptions().colors[0]],
               [1, Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')]
            ]
         },
         marker: {
            radius: 2
         },
         lineWidth: 1,
         states: {
            hover: {
               lineWidth: 1
            }
         },
         threshold: null
      }
   };
   var series= [{
      type: 'area',
      name: 'USD to EUR',
      pointInterval: 24 * 3600 * 1000,
      pointStart: Date.UTC(2006, 0, 1),
      data: [
         0.8446, 0.8445, 0.8444, 0.8451,    0.8418, 0.8264,    0.8258, 0.8232,    0.8233, 0.8258,
         0.8283, 0.8278, 0.8256, 0.8292,    0.8239, 0.8239,    0.8245, 0.8265,    0.8261, 0.8269,
         0.8273, 0.8244, 0.8244, 0.8172,    0.8139, 0.8146,    0.8164, 0.82,    0.8269, 0.8269,
         0.8269, 0.8258, 0.8247, 0.8286,    0.8289, 0.8316,    0.832, 0.8333,    0.8352, 0.8357,
         0.8355, 0.8354, 0.8403, 0.8403,    0.8406, 0.8403,    0.8396, 0.8418,    0.8409, 0.8384,
         0.8386, 0.8372, 0.839, 0.84, 
         ]
      }
   ];
   
   var json = {};
   json.chart = chart;
   json.title = title;
   json.subtitle = subtitle;
   json.legend = legend;
   json.xAxis = xAxis;
   json.yAxis = yAxis;  
   json.series = series;
   json.plotOptions = plotOptions;
   $('#container').highcharts(json);
  
});

5、X 轴翻转曲线图

配置图表类型 type 为 spline。chart.type 默认为 "line"。

配置 X 轴翻转。inverted 设置为 true 即 X 轴翻转,默认为 false。

var chart = {
      type: 'spline',
      inverted: true
   }; 
   var title = {
      text: 'Atmosphere Temperature by Altitude'   
   };
   var subtitle = {
      text: 'According to the Standard Atmosphere Model'
   };
   var xAxis = {
      reversed: false,
      title: {
         enabled: true,
         text: 'Altitude'
      },
      labels: {
         formatter: function () {
            return this.value + 'km';
         }
      },
      maxPadding: 0.05,
      showLastLabel: true
   };
   var yAxis = {
      title: {
         text: 'Temperature'
      },
      labels: {
         formatter: function () {
            return this.value + '\xB0';
         }
      },
      lineWidth: 2
   };
   var legend = {
      enabled: false 
   };
   var tooltip = {
      headerFormat: '{series.name}
',
      pointFormat: '{point.x} km: {point.y}\xB0C'
   };
   var plotOptions = {
      spline: {
         marker: {
            enable: false
         }
      }
   };
   var series= [{
      name: 'Temperature',
      data: [[0, 15], [10, -50], [20, -56.5], [30, -46.5], [40, -22.1],
            [50, -2.5], [60, -27.7], [70, -55.7], [80, -76.5]]
   }];      
   
   
   var json = {};
   json.chart = chart;
   json.title = title;
   json.subtitle = subtitle;
   json.legend = legend;
   json.tooltip = tooltip;
   json.xAxis = xAxis;
   json.yAxis = yAxis;  
   json.series = series;
   json.plotOptions = plotOptions;
   $('#container').highcharts(json);
  
});

6、带标记曲线图

我们使用 marker.symbol 属性来配置标记。标记可以是 'square', 'diamond' 或 图片 url。标记可以添加在任何的数据点上:

var chart = {
      type: 'spline'      
   }; 
   var title = {
      text: 'Monthly Average Temperature'   
   };
   var subtitle = {
      text: 'Source: WorldClimate.com'
   };
   var xAxis = {
      categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
         'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
   };
   var yAxis = {
      title: {
         text: 'Temperature'
      },
      labels: {
         formatter: function () {
            return this.value + '\xB0';
         }
      },
      lineWidth: 2
   };
   var tooltip = {
      crosshairs: true,
      shared: true
   };
   var plotOptions = {
      spline: {
         marker: {
            radius: 4,
            lineColor: '#666666',
            lineWidth: 1
         }
      }
   };
   var series= [{
         name: 'Tokyo',
         marker: {
            symbol: 'square'
         },
         data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, {
            y: 26.5,
            marker: {
               symbol: 'url(http://www.highcharts.com/demo/gfx/sun.png)'
            }
         }, 23.3, 18.3, 13.9, 9.6]
      }, {
         name: 'London',
         marker: {
            symbol: 'diamond'
         },
         data: [{
            y: 3.9,
            marker: {
               symbol: 'url(http://www.highcharts.com/demo/gfx/snow.png)'
            }
         }, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8]
      }
   ];      
      
   var json = {};
   json.chart = chart;
   json.title = title;
   json.subtitle = subtitle;
   json.tooltip = tooltip;
   json.xAxis = xAxis;
   json.yAxis = yAxis;  
   json.series = series;
   json.plotOptions = plotOptions;
   $('#container').highcharts(json);
  
});

7、标示区曲线图

使用 yAxis.plotBands 属性来配置标示区。区间范围使用 'from' 和 'to' 属性。颜色设置使用 'color' 属性。标签样式使用 'label' 属性。

var chart = {
      type: 'spline'      
   }; 
   var title = {
      text: 'Wind speed during two days'   
   };
   var subtitle = {
      text: 'October 6th and 7th 2009 at two locations in Vik i Sogn, Norway'
   };
   var xAxis = {
      type: 'datetime',
      labels: {
         overflow: 'justify'
      }
   };
   var yAxis = {
      title: {
         text: 'Wind speed (m/s)'
      },
      min: 0,
      minorGridLineWidth: 0,
      gridLineWidth: 0,
      alternateGridColor: null,
      plotBands: [{ // Light air
         from: 0.3,
         to: 1.5,
         color: 'rgba(68, 170, 213, 0.1)',
         label: {
            text: 'Light air',
            style: {
               color: '#606060'
            }
         }
      }, { // Light breeze
         from: 1.5,
         to: 3.3,
         color: 'rgba(0, 0, 0, 0)',
         label: {
            text: 'Light breeze',
            style: {
               color: '#606060'
            }
         }
      }, { // Gentle breeze
         from: 3.3,
         to: 5.5,
         color: 'rgba(68, 170, 213, 0.1)',
         label: {
            text: 'Gentle breeze',
            style: {
               color: '#606060'
            }   
         }
      }, { // Moderate breeze
         from: 5.5,
         to: 8,
         color: 'rgba(0, 0, 0, 0)',
         label: {
            text: 'Moderate breeze',
            style: {
               color: '#606060'
            }
         }
      }, { // Fresh breeze
         from: 8,
         to: 11,
         color: 'rgba(68, 170, 213, 0.1)',
         label: {
            text: 'Fresh breeze',
            style: {
               color: '#606060'
            }
         }
      }, { // Strong breeze
         from: 11,
         to: 14,
         color: 'rgba(0, 0, 0, 0)',
         label: {
            text: 'Strong breeze',
            style: {
               color: '#606060'
            }
         }   
      }, { // High wind
         from: 14,
         to: 15,
         color: 'rgba(68, 170, 213, 0.1)',
         label: {
            text: 'High wind',
            style: {
               color: '#606060'
            }
         }
      }]
   };
   var tooltip = {
      valueSuffix: ' m/s'
   };
   var plotOptions = {
      spline: {
         lineWidth: 4,
         states: {
            hover: {
               lineWidth: 5
            }
         },
         marker: {
            enabled: false
         },
         pointInterval: 3600000, // one hour
         pointStart: Date.UTC(2009, 9, 6, 0, 0, 0)
      }
   };
   var series= [{
         name: 'Vik i Sogn',      
         data: [4.3, 5.1, 4.3, 5.2, 5.4, 4.7, 3.5, 4.1, 5.6, 7.4, 6.9, 7.1,
         7.9, 7.9, 7.5, 6.7, 7.7, 7.7, 7.4, 7.0, 7.1, 5.8, 5.9, 7.4,
         8.2, 8.5, 9.4, 8.1, 10.9, 10.4, 10.9, 12.4, 12.1, 9.5, 7.5,
         7.1, 7.5, 8.1, 6.8, 3.4, 2.1, 1.9, 2.8, 2.9, 1.3, 4.4, 4.2,
         3.0, 3.0]
      }, {
         name: 'Norway',
         data: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.0, 0.3, 0.0,
         0.0, 0.4, 0.0, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
         0.0, 0.6, 1.2, 1.7, 0.7, 2.9, 4.1, 2.6, 3.7, 3.9, 1.7, 2.3,
         3.0, 3.3, 4.8, 5.0, 4.8, 5.0, 3.2, 2.0, 0.9, 0.4, 0.3, 0.5, 0.4]
   }];     
   var navigation = {
      menuItemStyle: {
         fontSize: '10px'
      }
   }   
      
   var json = {};
   json.chart = chart;
   json.title = title;
   json.subtitle = subtitle;
   json.tooltip = tooltip;
   json.xAxis = xAxis;
   json.yAxis = yAxis;  
   json.series = series;
   json.plotOptions = plotOptions;
   json.navigation = navigation;
   $('#container').highcharts(json);
  
});

8、不规则时间间隔图表

var chart = {
      type: 'spline'      
   }; 
   var title = {
      text: 'Snow depth at Vikjafjellet, Norway'   
   };
   var subtitle = {
      text: 'Irregular time data in Highcharts JS'
   };
   var xAxis = {
      type: 'datetime',
      dateTimeLabelFormats: { // don't display the dummy year
         month: '%e. %b',
         year: '%b'
      },
      title: {
         text: 'Date'
      }
   };
   var yAxis = {
      title: {
         text: 'Snow depth (m)'
      },
      min: 0
   };
   var tooltip = {
      headerFormat: '{series.name}
',
      pointFormat: '{point.x:%e. %b}: {point.y:.2f} m'
   };
   var plotOptions = {
      spline: {
         marker: {
            enabled: true
         }
      }
   };
   var series= [{
         name: 'Winter 2007-2008',
            // Define the data points. All series have a dummy year
            // of 1970/71 in order to be compared on the same x axis. Note
            // that in JavaScript, months start at 0 for January, 1 for February etc.
         data: [
             [Date.UTC(1970,  9, 27), 0   ],
             [Date.UTC(1970, 10, 10), 0.6 ],
             [Date.UTC(1970, 10, 18), 0.7 ],
             [Date.UTC(1970, 11,  2), 0.8 ],
             [Date.UTC(1970, 11,  9), 0.6 ],
             [Date.UTC(1970, 11, 16), 0.6 ],
             [Date.UTC(1970, 11, 28), 0.67],
             [Date.UTC(1971,  0,  1), 0.81],
             [Date.UTC(1971,  0,  8), 0.78],
             [Date.UTC(1971,  0, 12), 0.98],
             [Date.UTC(1971,  0, 27), 1.84],
             [Date.UTC(1971,  1, 10), 1.80],
             [Date.UTC(1971,  1, 18), 1.80],
             [Date.UTC(1971,  1, 24), 1.92],
             [Date.UTC(1971,  2,  4), 2.49],
             [Date.UTC(1971,  2, 11), 2.79],
             [Date.UTC(1971,  2, 15), 2.73],
             [Date.UTC(1971,  2, 25), 2.61],
             [Date.UTC(1971,  3,  2), 2.76],
             [Date.UTC(1971,  3,  6), 2.82],
             [Date.UTC(1971,  3, 13), 2.8 ],
             [Date.UTC(1971,  4,  3), 2.1 ],
             [Date.UTC(1971,  4, 26), 1.1 ],
             [Date.UTC(1971,  5,  9), 0.25],
             [Date.UTC(1971,  5, 12), 0   ]
         ]
      }, {
         name: 'Winter 2008-2009',
         data: [
             [Date.UTC(1970,  9, 18), 0   ],
             [Date.UTC(1970,  9, 26), 0.2 ],
             [Date.UTC(1970, 11,  1), 0.47],
             [Date.UTC(1970, 11, 11), 0.55],
             [Date.UTC(1970, 11, 25), 1.38],
             [Date.UTC(1971,  0,  8), 1.38],
             [Date.UTC(1971,  0, 15), 1.38],
             [Date.UTC(1971,  1,  1), 1.38],
             [Date.UTC(1971,  1,  8), 1.48],
             [Date.UTC(1971,  1, 21), 1.5 ],
             [Date.UTC(1971,  2, 12), 1.89],
             [Date.UTC(1971,  2, 25), 2.0 ],
             [Date.UTC(1971,  3,  4), 1.94],
             [Date.UTC(1971,  3,  9), 1.91],
             [Date.UTC(1971,  3, 13), 1.75],
             [Date.UTC(1971,  3, 19), 1.6 ],
             [Date.UTC(1971,  4, 25), 0.6 ],
             [Date.UTC(1971,  4, 31), 0.35],
             [Date.UTC(1971,  5,  7), 0   ]
         ]
      }, {
         name: 'Winter 2009-2010',
         data: [
             [Date.UTC(1970,  9,  9), 0   ],
             [Date.UTC(1970,  9, 14), 0.15],
             [Date.UTC(1970, 10, 28), 0.35],
             [Date.UTC(1970, 11, 12), 0.46],
             [Date.UTC(1971,  0,  1), 0.59],
             [Date.UTC(1971,  0, 24), 0.58],
             [Date.UTC(1971,  1,  1), 0.62],
             [Date.UTC(1971,  1,  7), 0.65],
             [Date.UTC(1971,  1, 23), 0.77],
             [Date.UTC(1971,  2,  8), 0.77],
             [Date.UTC(1971,  2, 14), 0.79],
             [Date.UTC(1971,  2, 24), 0.86],
             [Date.UTC(1971,  3,  4), 0.8 ],
             [Date.UTC(1971,  3, 18), 0.94],
             [Date.UTC(1971,  3, 24), 0.9 ],
             [Date.UTC(1971,  4, 16), 0.39],
             [Date.UTC(1971,  4, 21), 0   ]
         ]
      }
   ];     
      
   var json = {};
   json.chart = chart;
   json.title = title;
   json.subtitle = subtitle;
   json.tooltip = tooltip;
   json.xAxis = xAxis;
   json.yAxis = yAxis;  
   json.series = series;
   json.plotOptions = plotOptions;
   $('#container').highcharts(json);
  
});

9、对数图表

配置 yAxis.type 为 'logarithmic'。它定义了 x 轴类型。可选值有 "linear", "logarithmic", "datetime" 或 "category"。默认值为linear。

var title = {
      text: '对数实例(runoob.com)'   
   };
   var xAxis = {
      tickInterval: 1
   };
   var yAxis = {
      type: 'logarithmic',
      minorTickInterval: 0.1
   };
   var tooltip = {
      headerFormat: '{series.name}
',
      pointFormat: 'x = {point.x}, y = {point.y}'
   };
   var plotOptions = {
      spline: {
         marker: {
            enabled: true
         }
      }
   };
   var series= [{
         name: 'data',
         data: [1, 2, 4, 8, 16, 32, 64, 128, 256, 512],
         pointStart: 1
      }
   ];     
      
   var json = {};   
   json.title = title;   
   json.tooltip = tooltip;
   json.xAxis = xAxis;
   json.yAxis = yAxis;  
   json.series = series;
   json.plotOptions = plotOptions;
   $('#container').highcharts(json);
  
});

五、条形图

1、基本条形图

设置 chart 的 type 属性 为 bar ,chart.type 描述了图表类型。默认值为 "line"。

var chart = {
      type: 'bar'
   };
   var title = {
      text: 'Historic World Population by Region'   
   };
   var subtitle = {
      text: 'Source: Wikipedia.org'  
   };
   var xAxis = {
      categories: ['Africa', 'America', 'Asia', 'Europe', 'Oceania'],
      title: {
         text: null
      }
   };
   var yAxis = {
      min: 0,
      title: {
         text: 'Population (millions)',
         align: 'high'
      },
      labels: {
         overflow: 'justify'
      }
   };
   var tooltip = {
      valueSuffix: ' millions'
   };
   var plotOptions = {
      bar: {
         dataLabels: {
            enabled: true
         }
      }
   };
   var legend = {
      layout: 'vertical',
      align: 'right',
      verticalAlign: 'top',
      x: -40,
      y: 100,
      floating: true,
      borderWidth: 1,
      backgroundColor: ((Highcharts.theme && Highcharts.theme.legendBackgroundColor) || '#FFFFFF'),
      shadow: true
   };
   var credits = {
      enabled: false
   };
   
   var series= [{
         name: 'Year 1800',
            data: [107, 31, 635, 203, 2]
        }, {
            name: 'Year 1900',
            data: [133, 156, 947, 408, 6]
        }, {
            name: 'Year 2008',
            data: [973, 914, 4054, 732, 34]      
        }
   ];     
      
   var json = {};   
   json.chart = chart; 
   json.title = title;   
   json.subtitle = subtitle; 
   json.tooltip = tooltip;
   json.xAxis = xAxis;
   json.yAxis = yAxis;  
   json.series = series;
   json.plotOptions = plotOptions;
   json.legend = legend;
   json.credits = credits;
   $('#container').highcharts(json);
  
});

2、堆叠条形图

配置图表堆叠使用 plotOptions.series.stacking,并设置为 "normal"。

如果禁用堆叠可设置为 null , "normal" 通过值设置堆叠, "percent" 堆叠则按百分比。

var plotOptions = {
      bar: {
         dataLabels: {
            enabled: true
         }
      },
      series: {
         stacking: 'normal'
      }
   };

3、反向条形图

使用负值的,反向条形图。

var series= [{
      name: 'John',
            data: [5, 3, 4, 7, 2]
        }, {
            name: 'Jane',
            data: [2, -2, -3, 2, 1]
        }, {
            name: 'Joe',
            data: [3, 4, 4, -2, 5]
      }
   ];

六 、柱形图

1、基本柱形图

var chart = {
      type: 'column'
   };
   var title = {
      text: '每月平均降雨量'   
   };
   var subtitle = {
      text: 'Source: runoob.com'  
   };
   var xAxis = {
      categories: ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'],
      crosshair: true
   };
   var yAxis = {
      min: 0,
      title: {
         text: '降雨量 (mm)'         
      }      
   };
   var tooltip = {
      headerFormat: '{point.key}',
      pointFormat: '' +
         '',
      footerFormat: '{series.name}: 	{point.y:.1f} mm',
      shared: true,
      useHTML: true
   };
   var plotOptions = {
      column: {
         pointPadding: 0.2,
         borderWidth: 0
      }
   };  
   var credits = {
      enabled: false
   };
   
   var series= [{
        name: 'Tokyo',
            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]
        }, {
            name: 'New York',
            data: [83.6, 78.8, 98.5, 93.4, 106.0, 84.5, 105.0, 104.3, 91.2, 83.5, 106.6, 92.3]
        }, {
            name: 'London',
            data: [48.9, 38.8, 39.3, 41.4, 47.0, 48.3, 59.0, 59.6, 52.4, 65.2, 59.3, 51.2]
        }, {
            name: 'Berlin',
            data: [42.4, 33.2, 34.5, 39.7, 52.6, 75.5, 57.4, 60.4, 47.6, 39.1, 46.8, 51.1]
   }];     
      
   var json = {};   
   json.chart = chart; 
   json.title = title;   
   json.subtitle = subtitle; 
   json.tooltip = tooltip;
   json.xAxis = xAxis;
   json.yAxis = yAxis;  
   json.series = series;
   json.plotOptions = plotOptions;  
   json.credits = credits;
   $('#container').highcharts(json);
  
});

2、反向柱形图

七、饼图

基本饼图

var chart = {
       plotBackgroundColor: null,
       plotBorderWidth: null,
       plotShadow: false
   };
   var title = {
      text: '2014 年各浏览器市场占有比例'   
   };      
   var tooltip = {
      pointFormat: '{series.name}: {point.percentage:.1f}%'
   };
   var plotOptions = {
      pie: {
         allowPointSelect: true,
         cursor: 'pointer',
         dataLabels: {
            enabled: true,
            format: '{point.name}%: {point.percentage:.1f} %',
            style: {
               color: (Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black'
            }
         }
      }
   };
   var series= [{
      type: 'pie',
      name: 'Browser share',
      data: [
         ['Firefox',   45.0],
         ['IE',       26.8],
         {
            name: 'Chrome',
            y: 12.8,
            sliced: true,
            selected: true
         },
         ['Safari',    8.5],
         ['Opera',     6.2],
         ['Others',   0.7]
      ]
   }];     
      
   var json = {};   
   json.chart = chart; 
   json.title = title;     
   json.tooltip = tooltip;  
   json.series = series;
   json.plotOptions = plotOptions;
   $('#container').highcharts(json);  
});

八、3D图

3D 柱形图

设置 chart 的 type 属性为 column,options3d 选项可设置三维效果。

var chart = {
      renderTo: 'container',
      type: 'column',
      margin: 75,
      options3d: {
         enabled: true,
         alpha: 15,
         beta: 15,
         depth: 50,
         viewDistance: 25
      }
   };
   var title = {
      text: '图表旋转实例'   
   };
   var subtitle = {
      text: '通过拖动下面的滑块测试'  
   };
   
   var plotOptions = {
      column: {
         depth: 25
      }
   };
   var series= [{
      data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
   }];     
      
   var json = {};   
   json.chart = chart; 
   json.title = title;   
   json.subtitle = subtitle;    
   json.series = series;
   json.plotOptions = plotOptions;
   var highchart = new Highcharts.Chart(json);
  
   function showValues() {
      $('#R0-value').html(highchart.options.chart.options3d.alpha);
      $('#R1-value').html(highchart.options.chart.options3d.beta);
   }

   // Activate the sliders
   $('#R0').on('change', function () {
      highchart.options.chart.options3d.alpha = this.value;
      showValues();
      highchart.redraw(false);
   });
   $('#R1').on('change', function () {
      highchart.options.chart.options3d.beta = this.value;
      showValues();
      highchart.redraw(false);
   });

   showValues();
});

九、测量图(仪表图)

测量图

var chart = {      
      type: 'gauge',
      plotBackgroundColor: null,
      plotBackgroundImage: null,
      plotBorderWidth: 0,
      plotShadow: false
   };
   var title = {
      text: '车速表'   
   };     

   var pane = {
      startAngle: -150,
      endAngle: 150,
      background: [{
         backgroundColor: {
            linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
            stops: [
               [0, '#FFF'],
               [1, '#333']
            ]
         },
         borderWidth: 0,
         outerRadius: '109%'
      }, {
         backgroundColor: {
            linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
            stops: [
               [0, '#333'],
               [1, '#FFF']
            ]
         },
         borderWidth: 1,
         outerRadius: '107%'
     }, {
         // default background
     }, {
         backgroundColor: '#DDD',
         borderWidth: 0,
         outerRadius: '105%',
         innerRadius: '103%'
     }]
   };

   // the value axis
   var yAxis = {
      min: 0,
      max: 200,

      minorTickInterval: 'auto',
      minorTickWidth: 1,
      minorTickLength: 10,
      minorTickPosition: 'inside',
      minorTickColor: '#666',

      tickPixelInterval: 30,
      tickWidth: 2,
      tickPosition: 'inside',
      tickLength: 10,
      tickColor: '#666',
      labels: {
         step: 2,
         rotation: 'auto'
      },
      title: {
         text: 'km/h'
      },
      plotBands: [{
         from: 0,
         to: 120,
         color: '#55BF3B' // green
      }, {
         from: 120,
         to: 160,
         color: '#DDDF0D' // yellow
      }, {
         from: 160,
         to: 200,
         color: '#DF5353' // red
      }]
   };

   var series= [{
        name: 'Speed',
        data: [80],
        tooltip: {
           valueSuffix: ' km/h'
        }
   }];     
      
   var json = {};   
   json.chart = chart; 
   json.title = title;       
   json.pane = pane; 
   json.yAxis = yAxis; 
   json.series = series;     
   
   // Add some life
   var chartFunction = function (chart) {
      if (!chart.renderer.forExport) {
         setInterval(function () {
         var point = chart.series[0].points[0], newVal, inc = Math.round((Math.random() - 0.5) * 20);
         newVal = point.y + inc;
         if (newVal < 0 || newVal > 200) {
            newVal = point.y - inc;
         }
         point.update(newVal);
         }, 3000);
      }
   };
   
   $('#container').highcharts(json,chartFunction);
});

十、组合图

柱形图,线条图,饼图

var title = {
      text: 'Combination chart'   
   };
   var xAxis = {
      categories: ['Apples', 'Oranges', 'Pears', 'Bananas', 'Plums']
   };
   var labels = {
      items: [{
         html: '水果消费',
            style: {
               left: '50px',
               top: '18px',
               color: (Highcharts.theme && Highcharts.theme.textColor) || 'black'
            }
      }]
   };
   var series= [{
        type: 'column',
            name: 'Jane',
            data: [3, 2, 1, 3, 4]
        }, {
            type: 'column',
            name: 'John',
            data: [2, 3, 5, 7, 6]
        }, {
            type: 'column',
            name: 'Joe',
            data: [4, 3, 3, 9, 0]
        }, {
            type: 'spline',
            name: 'Average',
            data: [3, 2.67, 3, 6.33, 3.33],
            marker: {
                lineWidth: 2,
                lineColor: Highcharts.getOptions().colors[3],
                fillColor: 'white'
            }
        }, {
            type: 'pie',
            name: '总消费',
            data: [{
                name: 'Jane',
                y: 13,
                color: Highcharts.getOptions().colors[0] // Jane 的颜色
            }, {
                name: 'John',
                y: 23,
                color: Highcharts.getOptions().colors[1] // John 的颜色
            }, {
                name: 'Joe',
                y: 19,
                color: Highcharts.getOptions().colors[2] // Joe 的颜色
            }],
            center: [100, 80],
            size: 100,
            showInLegend: false,
            dataLabels: {
                enabled: false
            }
      }
   ];     
      
   var json = {};   
   json.title = title;   
   json.xAxis = xAxis;
   json.labels = labels;  
   json.series = series;
   $('#container').highcharts(json);  
});

十一、动态图

每秒更新曲线图

chart.event 属性中添加 load 方法(图表加载事件)。在 1000 毫秒内随机产生数据点并生成图表。

var chart = {
      type: 'spline',
      animation: Highcharts.svg, // don't animate in IE < IE 10.
      marginRight: 10,
      events: {
         load: function () {
            // set up the updating of the chart each second
            var series = this.series[0];
            setInterval(function () {
               var x = (new Date()).getTime(), // current time
               y = Math.random();
               series.addPoint([x, y], true, true);
            }, 1000);
         }
      }
   };
   var title = {
      text: 'Live random data'   
   };   
   var xAxis = {
      type: 'datetime',
      tickPixelInterval: 150
   };
   var yAxis = {
      title: {
         text: 'Value'
      },
      plotLines: [{
         value: 0,
         width: 1,
         color: '#808080'
      }]
   };
   var tooltip = {
      formatter: function () {
      return '' + this.series.name + '
' +
         Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x) + '
' +
         Highcharts.numberFormat(this.y, 2);
      }
   };
   var plotOptions = {
      area: {
         pointStart: 1940,
         marker: {
            enabled: false,
            symbol: 'circle',
            radius: 2,
            states: {
               hover: {
                 enabled: true
               }
            }
         }
      }
   };
   var legend = {
      enabled: false
   };
   var exporting = {
      enabled: false
   };
   var series= [{
      name: 'Random data',
      data: (function () {
         // generate an array of random data
         var data = [],time = (new Date()).getTime(),i;
         for (i = -19; i <= 0; i += 1) {
            data.push({
               x: time + i * 1000,
               y: Math.random()
            });
         }
         return data;
      }())    
   }];     
      
   var json = {};   
   json.chart = chart; 
   json.title = title;     
   json.tooltip = tooltip;
   json.xAxis = xAxis;
   json.yAxis = yAxis; 
   json.legend = legend;  
   json.exporting = exporting;   
   json.series = series;
   json.plotOptions = plotOptions;
   
   
   Highcharts.setOptions({
      global: {
         useUTC: false
      }
   });
   $('#container').highcharts(json);
  
});

到此这篇关于JavaScript图表插件highcharts的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文