Javascript 使用highchart创建图表时出错

Javascript 使用highchart创建图表时出错,javascript,highcharts,Javascript,Highcharts,我需要使用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

我需要使用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(如Feb),另一列应具有以下值:

    7271 4537   5379    245 0   1941
    

你能帮帮我吗?

按照你现在的方式,你将得到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);
});
$.get('data.csv',函数(数据){
变量行=data.split('\n');
var series1={name:'India',数据:[]};
var series2={name:'China',数据:[]};
var series3={name:'Australia',数据:[]};
var series4={name:'shrelanka',数据:[]};
var series5={name:'US',数据:[]};
var series6={name:'Cuba',数据:[]};
$.each(行,函数)(行号,行){
var items=line.split(',');
//忽略最后两行
如果(行号<12){
$。每个(项目,功能(项目编号,项目){
如果(itemNo==0){
series1.data.push(parseFloat(item));
}else if(itemNo==1){
series2.data.push(parseFloat(item));
}否则如果(itemNo==2){
series3.data.push(parseFloat(item));
}否则如果(itemNo==3){
series4.data.push(parseFloat(item));
}否则如果(itemNo==4){
series5.data.push(parseFloat(item));
}否则如果(itemNo==5){
series6.data.push(parseFloat(item));
}
});
}
});
选项.系列.推送(系列1);
选项.系列.推送(系列2);
选项.系列.推送(系列3);
选项.系列.推送(系列4);
选项.系列.推送(系列5);
选项。系列。推送(系列6);
var图表=新的Highcharts.图表(选项);
});

如果字母代表一年中的几个月,那么您必须输入许多字母。一年只有12个月。然而,你有14封信。字母M和N代表什么?很难说数据是什么样子,因为示例数据不是逗号分隔的,但代码是在“,”上拆分的。您的示例数据看起来只是一个长字符串,而不是拆分成行/新行。这是真的吗?如果A是“像Jan”,那么为什么不叫它“Jan”?通过查看它,我猜您需要6个独立的系列。我说得对吗?看起来你只是在代码中创建了一个系列。好的,让我解释一下:月份,印度,中国,澳大利亚,美国,古巴,1月,156601549654567918473616081942329二月,727145375379245,01941三月,43471914310753976860,0现在使用上面的数据,我需要创建与下面链接中提到的相同的图表-在上面的图表中,一月一起为托克约、纽约、伦敦和柏林展示……与此表单类似,我的一月数据需要为印度、中国、澳大利亚、斯里兰卡、美国、古巴创建与链接中图表相同的列……因此,您确实希望图表中包含6个独立的系列。A行代表一月,L行代表十二月。中间的所有字母代表中间的月份。那么M行和N行代表什么呢?谢谢…你有我的问题。。。我们将忽略M和N。我已经尝试了很多,但无法获得预期的结果,请您确定我需要在上述代码中修改哪些内容。如果您可以修改CSV文件,使其符合我为您显示的上述格式,则您的代码应按原样工作。我会检查一下这是否可行。如果是这样,一切对你来说都会更干净、更容易。如果您手动创建一个具有上述格式的文件,并通过您的程序运行它,您将看到我的意思。如果您无法更改CSV文件的组织,请查看我编辑的答案。嗨,玲儿……我今天尝试了。首先,向您致敬的是,您向我解释的方式真的很棒。基本上,我来自大型机,所以退出对我来说很困难,但按照你解释的方式,我现在明白了…它工作得很好..谢谢你留恋。。!!欢迎光临。如果我的答案有效,请投票并将其标记为接受答案。请查看您是否不知道如何投票或将问题标记为已接受。