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 轴类别。所以,我想创建一个像 这里看到的图表

我做的:

$(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(如二月),另一列应具有以下值:

    7271 4537   5379    245 0   1941
    

你能帮帮我吗?

4

1 回答 1

3

按照现在的方式,您最终将得到 14 个系列,每个系列包含 6 个数据点。如果可以的话,您真正需要做的是更改 csv 文件,以便您的列代表月份,而行代表系列,如下所示: 在此处输入图像描述

然后,您可以为每一行创建一个数组并将该数组传递给 highchart。我认为您的代码应该适用于上述 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);
});
于 2012-06-08T17:51:27.000 回答