2012-06-08 37 views
2

我需要使用CSV数据创建图表/条形图。以下是数据格式:使用高图创建图表时出错

A 156600 154965 45679 184736 160819 42329 
B 7271 4537 5379 245 0  1941 
C 4347 19143 1075 397 6860 0 
D 15  11283 1477 0  0  0 
E 6323 537697 222430 21701 98725 3792 
F 0  0  0  0  0  0 
G 284356 744986 616369 0  0  106877 
H 0  0  0  0  0  0 
I 0  0  0  32962 0  0 
J 0  12742 616 0  0  0 
K 0  1215413 1420 0  0  0 
L 0  0  0  0  0  0 
M 24191 50166 18163 55282 48262 5862 
N 0  0  0  0  0  20396 

这里我将手动添加X轴类别。所以,我想创建一个像 the one seen here

我发这个图表:

$(document).ready(function() { 
    var options = { 
     chart: { 
      renderTo: 'container', 
      defaultSeriesType: 'column' 
     }, 
     title: { 
      text: 'Total Transactions' 
     }, 
     xAxis: { 
      categories: [],labels : { y : 20, rotation: -45, align: 'right' } 
     }, 
     yAxis: { 
      title: { 
       text: 'Units' 
      } 
     }, 
     series: [] 
    }; 

    $.get('data.csv', function(data) { 
     // Split the lines 
     var lines = data.split('\n'); 
       var series = { 
        name: 'Transactions ', 
        data: [] 
       }; 
     $.each(lines, function(lineNo, line) { 

      var items = line.split(','); 
      if (lineNo != 0) { 
       $.each(items, function(itemNo, item) { 
         if (itemNo == 0) { 
          options.xAxis.categories.push(item); 
         } else if (itemNo == 2){ 

          series.data.push(parseFloat(item)); 
         } 
       }); 
      } 

     }); 
     options.series.push(series); 
     var chart = new Highcharts.Chart(options); 
    }); 

}); 

但它采取逐列值意味着:

156600 
7271  
4347  
15 
6323  
0 
284356 
0 
0 
0 
0 
0 
24191 
0 

但我需要这个来代替:

  • 对于A(如Jan),其值应为

    156600 154965 45679 184736 160819 42329 
    
  • 对于B(像2月),另一列应具有以下值:

    7271 4537 5379 245 0 1941 
    

你能帮我吗?

+0

如果这些字母代表一年中的几个月份,那么您必须有很多字母。一年只有12个月。但是,你有14个字母。字母M和N代表什么? – Linger

+0

真的很难分辨您的数据是什么样子,因为您的示例数据不是用逗号分隔的,而是您的代码在','分裂。它也看起来像你的样本数据只是一个长字符串 - 没有分成行/新行。这是真的?如果A是“像Jan”那么为什么不把它称为“Jan”呢? – wergeld

+0

看着它,我猜你需要6个独立的系列。我对么?它看起来好像只是在代码中创建一个系列。 – Linger

回答

3

你现在拥有它的方式最终会有14个系列,每个系列包含6个数据点。你真正需要做的,如果你能为改变CSV文件,以便您的列代表月份和行代表的系列,像这样: enter image description here

然后您可以创建于各行的阵列,并通过数组高图。我认为你的代码应该与上面的csv结构一起工作,因为你基于\ n来执行分割。

编辑

如果你不能改变你的CSV格式文件,然后下面的修改后的代码应建立6大系列,你需要他们。它假定没有列或行的标题。它也忽略了超过一年的12个月的最后两行。

$.get('data.csv', function(data) { 
    var lines = data.split('\n'); 
    var series1 = {name: 'India', data: []}; 
    var series2 = {name: 'China', data: []}; 
    var series3 = {name: 'Australia', data: []}; 
    var series4 = {name: 'Shreelanka', data: []}; 
    var series5 = {name: 'US', data: []}; 
    var series6 = {name: 'Cuba', data: []}; 

    $.each(lines, function(lineNo, line) { 
    var items = line.split(','); 
    //IGNORE THE LAST TWO ROWS 
    if (lineNo < 12) { 
     $.each(items, function(itemNo, item) { 
     if (itemNo == 0) { 
      series1.data.push(parseFloat(item)); 
     } else if (itemNo == 1){ 
      series2.data.push(parseFloat(item)); 
     } else if (itemNo == 2){ 
      series3.data.push(parseFloat(item)); 
     } else if (itemNo == 3){ 
      series4.data.push(parseFloat(item)); 
     } else if (itemNo == 4){ 
      series5.data.push(parseFloat(item)); 
     } else if (itemNo == 5){ 
      series6.data.push(parseFloat(item)); 
     } 
     }); 
    } 
    }); 
    options.series.push(series1); 
    options.series.push(series2); 
    options.series.push(series3); 
    options.series.push(series4); 
    options.series.push(series5); 
    options.series.push(series6); 
    var chart = new Highcharts.Chart(options); 
}); 
+0

谢谢....你有我的问题...我们会忽略M和N.我已经尝试了很多,但无法获得预期的结果,请问您需要在上面的代码中修改哪些内容。 –

+0

如果您可以修改CSV文件,使其符合我为您显示的上述格式,那么您的代码应该按原样运行。我会实际检查看看是否可能。如果是这样,一切都会更清洁,更容易。如果你手动创建一个具有上述格式的文件并通过你的程序运行它,你会明白我的意思。 – Linger

+0

如果您无法更改CSV文件的组织,请参阅我编辑的答案。 – Linger