在JSON的单个Highcharts图中绘制多个系列

时间:2015-01-07 21:12:49

标签: javascript json plot highcharts

所以我有一个JSON对象,我试图用Highcharts绘制。 JSON对象类似于以下内容:

json_data = [
    {
        'name': "col1",
        'data': [1, 2, 3, 4, 5]},
    {
        'name': "col2",
        'data': [2, 4, 6, 8, 10]},
    {
        'name': "col3",
        'data': [2, 3, 4, 5, 6]},
    {
        'name': "col4",
        'data': [-1, -2, -3, -4, -5]},
]

我可以使用以下代码通过Highcharts绘制它:

$('#container').highcharts({
        chart: {
            type: 'line',
        },
        legend: {
               layout: 'vertical',
               align: 'right',
               verticalAlign: 'middle',
               borderWidth: 0,
        },
        title: {
                text: 'Data',
                x: -20 // center title
        },
        xAxis: {
              title: {text: 'Velocity (m/sec)'},            
        },
        yAxis: {title: {text: 'Force (N)'}},
        series: json_data,
    });

这会在我的json_data中绘制所有4列,但我要做的是针对col2绘制col1,针对col4绘制col3相同的图表,因此图表中只有2个线图。换句话说,x轴将由col1col3定义,并且两个线图将具有不同的间隔(x-ticks)。我知道我可以在series参数中定义不同的series:,但我很难理解如何从我的JSON对象中选择它们。

基本上我需要将我的JSON从其原始格式重新排列为两个系列的数据,如下所示:

// col2 against col1
series1 = [ [1, 2],
            [2, 4],
            [3, 6],
            [4, 8],
            [5, 10]
]

// col4 against col3
series2 = [ [2, -1],
            [3, -2],
            [4, -3],
            [5, -4],
            [6, -5]
]

任何有关如何实现这一目标的帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

对于任何后代,这里是我提出的解决方案,假设每个数据数组的长度相同(我的用例):

    var arr = [json_data];

    // first series data to plot
    var series1 = [];
    for (var i = 0; i < arr[0][0].data.length; i++)
    {
        var temp = [];
        temp.push(arr[0][0].data[i]);
        temp.push(arr[0][1].data[i]);                   
        series1.push(temp);
    }

    // second series data to plot
    var series2 = [];
    for (var i = 0; i < arr[0][0].data.length; i++)
    {
        var temp = [];
        temp.push(arr[0][2].data[i]);
        temp.push(arr[0][3].data[i]);                   
        series2.push(temp);
    }

在我的highcharts series:参数中:

     series: [{
            name: "Series 1",
            data: series1
     }, {
            name: "Series 2",
            data: series2
     }],