Highcharts工作笔记

本文介绍Highcharts组件的基本配置方法,包括单个及多个数据源的图表绘制过程,并提供实例代码帮助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


最近做流量统计时用到一个highcharts组件,现在项目完成了,但我并没有深入研究它的配置,因为配置项实在太多了,我认为这些东西只需要会最基本的配置,至于其它,用到的时候再去查API就好了。这里简单记录下它的配置:

一、单个数据源时

图1

图2
如上图,配置如下:
//绘制图表
function drawLineChart(data) {
        var xAxisArr = [],
             yAxisArr = [];
        
        $.each(data,function(key,value){
            xAxisArr.push(key);
            yAxisArr.push(value);
        });
        
        //计算x轴的步长 (当数据较多时,x轴会显示不下,所以需要间隔显示)
        var xLen = xAxisArr.length,
            maxLabelNum = 20, //x轴上最多显示的label个数,过多就会挤在一起
            step = Math.round(xLen / maxLabelNum) < 1 ? 1 : Math.round(xLen / maxLabelNum);
            
        chart = new Highcharts.Chart({
                chart: {
                    renderTo: 'J_Diagram',  //图表将要被渲染到哪个dom节点中
                    type: 'line',  //线性显示
                    marginRight: 100,  //图表距离右侧的距离,即上图中 "该月的流量"的显示宽度
                    marginBottom: 50 //图表距离下方的距离,即上图中 x轴 label的显示高度, 刚开始label一直显示不全,有一半被隐藏了, 后来发现将这个值变大就可以了
                },
                title: {
                    text: '' //图表的标题, 此为图1的设置,设为空串则不显示title, 如果不配置此项,此会显示默认的title,如图2所示
                },
                xAxis: {
                    categories: xAxisArr, //x轴显示的label,如果不设置此项,则会显示默认的数字,即1,2,...n
                    tickInterval: step,  //x轴上显示点的间隔,默认和y轴上的点的个数相同, 但这样会造成x轴过于密集
                       labels: {
                           style: {
                               width: 'auto',
                               height: 'auto'
                           },
                           rotation: -30, //x轴label逆时针旋转30度
                          align: 'right' //,
                         // step: step //x轴上label标签的间隔,即隔多少个点显示一个label,注意如果只设置此项则x轴上的点不会变,还是会每个都显示
                                             //,当设置了tickInterval时此值可以不设, 会和tickInterval相同
                       }
                },
                yAxis: {
                    title: {
                        text: '单位:GB'
                    },
                    plotLines: [{
                        value: 0,
                        width: 1,
                        color: '#808080'
                    }]
                },
                credits: {//图表右下角的水印,默认是highcharts.com,将其设为空串可以取消水印
                        text: '',
                        fontSize: '0'
                },
                tooltip: { //当鼠标移动图表上的某个点上时,显示的提示信息
                    formatter: function() {
                            return '<b>'+ this.series.name +'</b><br/>'+ this.x +': '+ this.y +'GB';
                    }
                },
                legend: { //图上 '该月的流量' 那部分的位置配置
                    layout: 'vertical',
                    align: 'right',   
                    verticalAlign: 'top',
                    x: 10,
                    y: 100,
                    borderWidth: 0
                },
                series: [{
                    name: '该'+ (queryParams.showBy == 'month' ? '月' : '日') +'的流量',  //图上 '该月的流量' 那部分的文字配置
                    data: yAxisArr
                }],
                plotOptions: {
                    series:{
                        marker: { //数据线上的点,默认不显示,当鼠标hover时才显示, 注意图1和图2中是enable设为true时的效果
                            symbol: 'triangle-down', //点的样式, 可选的值有"circle", "square", "diamond", "triangle"和"triangle-down",默认是circle
                            enabled: false,
                            states: {
                                hover: {
                                    enabled: true
                                }
                            }
                        }                       
                    }
                }
            });
    }


一、多个数据源时


图3

如上图,有多个数据需要显示时,配置如下,不再一一讲解,请对应单一数据源的讲解和官网API自己理解:

function drawLineChart(title, data){
    var    colors = ['#4572A7','#AA4643', '#89A54E', '#80699B', '#3D96AE', '#DB843D', '#92A8CD', '#A47D7C', '#B5CA92' ],
        xAxis = [],
        yAxis = [{
            title: {
                text: 'PV',
            },
            labels: {
                formatter: function(){
                    return this.value;
                },
            }
        }, {
            title: {
                text: 'UV'
            },
            labels: {
                formatter: function(){
                    return this.value;
                }
            },
            opposite: true
        }],
        ableskyPvData = [],
        ableskyUvData = [],
        wwwPvData = [],
        wwwUvData = [],
        orgPvData = [],
        orgUvDate = [];
    for(var i=0, l=data.length ; i<l; i++){
        var d = new Date();
        d.setTime(data[i].statsDate.time);
        xAxis.push(d.getFullYear() + '-' + (d.getMonth()+1) + '-' + d.getDate());
        ableskyPvData.push(data[i].totalPv);
        ableskyUvData.push(data[i].totalUv);
        wwwPvData.push(data[i].asDomainPv);
        wwwUvData.push(data[i].asDomainUv);
        orgPvData.push(data[i].orgDomainPv);
        orgUvDate.push(data[i].orgDomainUv);
    }
    var series = [{
        name: '总PV',
        data: ableskyPvData,
        yAxis: 0
    }, {
        name: '总UV',
        data: ableskyUvData,
        yAxis: 1
    }, {
        name: 'AS域名PV',
        data: wwwPvData,
        yAxis: 0
    }, {
        name: 'AS域名UV',
        data: wwwUvData,
        yAxis: 1
    }, {
        name: '机构域名PV',
        data: orgPvData,
        yAxis: 0
    }, {
        name: '机构域名UV',
        data: orgUvDate,
        yAxis: 1
    } ];
    var chart = new Highcharts.Chart({
        chart: {
            renderTo: 'chartContainer',
            type: 'line',
            zoomType: 'x'
        },
        title: {
            text: title,
               style: {
                font: 'bold 16px Verdana, sans-serif'
            }
        },
        credits: {
                text: 'www.ablesky.com',
                href: 'http://www.ablesky.com',
                fontSize: '16px'
        },
        colors: colors,
        xAxis: {
            categories: xAxis,
            labels: {
                rotation: -30,
                step: xAxis.length > 35? Math.round(xAxis.length / 20) : 1,
                align: 'right'
            }
        },
        yAxis: yAxis,
        tooltip: {
            formatter: function() {
                    return '<b>'+ this.series.name +'</b><br/>'+
                    this.x +': '+ this.y;
            }
        },
        plotOptions: {
            series:{                
                marker: {
                    enabled: false,
                    states: {
                        hover: {
                            enabled: true
                        }
                    }
                }
            }
        },
        series: series
    });
}

附1: 图1图2数据格式:


附2: 图3数据格式



附3:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值