Highcharts,如何在任意时间启动xAxis

时间:2012-10-31 17:10:28

标签: highcharts

我有一个日期时间为xAxis的折线图。我需要每隔10分钟显示一次刻度,因为我已将tickInterval设置为10 * 60 * 1000,我的问题是我需要在第一个日期后每10分钟显示一次刻度,例如,如果我的第一个点显示为10 :33,我需要在10:33,10:43,10:53等时间显示刻度,但是我所拥有的是10:30,10:40,10:50等等,有没有办法这样做?

谢谢!

2 个答案:

答案 0 :(得分:1)

这并不是那么简单,因为当x轴属于'datetime'类型时,Highcharts会自动确定要使用的标签:

In a datetime axis, the numbers are given in milliseconds, and tick marks are placed on appropriate values like full hours or days

要设置像'10:33'这样的标签,您需要创建自己的类别。幸运的是,这些可以简单地从您的数据和所需的时间间隔得出。

以下是一个有效的例子:http://jsfiddle.net/Rt7ZV/

我们只取出给定的开始日期,间隔和点数,并构建一个类别数组,用作x轴标签。

function getTimes(numTimes, interval) {

    var ms = (new Date(2012, 02, 30, 10, 33)).getTime();
    var times = [];
    var startDate = new Date(ms);
    times.push(startDate.getHours() + ":" + startDate.getMinutes());

    for (var i = 1; i< numTimes; i++)
    {
        ms += interval;
        var nextTime = (new Date()).setTime(ms);
        var nextDate = new Date(nextTime);
        times.push(nextDate.getHours() + ":" + pad(nextDate.getMinutes(), 2));
    }

    return times;

}

function pad(num, size) {
    var s = num+"";
    while (s.length < size) s = "0" + s;
    return s;
}

var data = [1, 2, 3, 4, 5, 3, 2, 5, 7, 6, 4];
var interval = 10*60*1000
var timeCategories = getTimes(data.length, interval);

$(function () {
    var chart;
    $(document).ready(function() {
        chart = new Highcharts.Chart({
            chart: {
                renderTo: 'container',
                zoomType: 'x',
                spacingRight: 20
            },
            title: {
                text: 'Time series'
            },
            xAxis: {
                categories: timeCategories,
                title: {
                    text: null
                },
                startOnTick: false
            },
            yAxis: {
                title: {
                    text: 'Exchange rate'
                },
                startOnTick: false,
                showFirstLabel: true
            },
            tooltip: {
                shared: true
            },
            legend: {
                enabled: false
            },


            series: [{
                type: 'line',
                name: 'time series',
                data: [
                    1, 2, 3, 4, 5, 3, 2, 5, 7, 6, 4
                ]
            }]
        });
    });

});

答案 1 :(得分:1)

我在xAxis上找到了tickPositions属性,这在highcharts上没有记录,只在highstock上有用,但似乎在两者上都能正常工作。使用此属性,您可以指定要为其打勾的值,并完美地解决我的问题。