将数组传递给系列数据不起作用

时间:2016-12-21 14:28:12

标签: highcharts

我试图在一个组合图表中绘制列和折线图。我必须从表中读取值并将其传递给系列。我已将它们读入数组并将其传递给数据属性(数组val3和val4),但它无法正常工作。当我生成一个数据不是来自表(数组val2和first_array_work)的数组时,它可以工作。

以下是JSFiddle https://jsfiddle.net/AnilKumarVallur/13x2uj7a/1/,此处附有完整的代码。

`<html>
<head>
<title>Highcharts Tutorial</title>
   <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
   <script src="https://code.highcharts.com/highcharts.js"></script>  
</head>
<body>
<div id="container" style="width: 550px; height: 400px; margin: 0 auto"></div>
<script language="JavaScript">
$(document).ready(function() {
    var cat_array = [];
    var first_array_work = [49.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4];
    var val2 = [];
    for(var i=0;i<5;i++){
        val2[i] = 10*i;
    }
    var first_array = [];
    var header_cat = 1;
    $("#datatable tr").eq(0).find('td').each(function(){
        if(header_cat){
            header_cat = 0;
        }
        else{
            cat_array.push($(this).text());
        }
    })
    var header_first = 1;
    var i=0;
    var val3 = [];
    $("#datatable tr").eq(1).find('td').each(function(){
        if(header_first){
            header_first = 0;
        }
        else{
            //first_array.push($(this).text());
            val3[i] = ($(this).text());
            //alert(val3[i]);
            i++;
        }
    })
    var cat = cat_array;
    var val4 = [];
    for(var m=0;m<val3.length;m++){
        val4[m] = val3[m];
    }
   var chart = {
      zoomType: 'xy'
   };
   var subtitle = {
      text: 'Source: WorldClimate.com'   
   };
   var title = {
      text: 'Average Monthly Temperature and Rainfall in Tokyo'   
   };
   var xAxis = {
      categories: cat,
      crosshair: true
   };
   var yAxis= [{ // Primary yAxis
      labels: {
         format: '{value}\xB0C',
         style: {
            color: Highcharts.getOptions().colors[1]
         }
      },
      title: {
         text: 'Temperature',
         style: {
            color: Highcharts.getOptions().colors[1]
         }
      }
   }, { // Secondary yAxis
      title: {
         text: 'Rainfall',
         style: {
            color: Highcharts.getOptions().colors[0]
         }
      },
      labels: {
         format: '{value} mm',
         style: {
            color: Highcharts.getOptions().colors[0]
         }
      },
      opposite: true
   }];
   var tooltip = {
      shared: true
   };
   var legend = {
      layout: 'vertical',
      align: 'left',
      x: 120,
      verticalAlign: 'top',
      y: 100,
      floating: true,
      backgroundColor: (Highcharts.theme && Highcharts.theme.legendBackgroundColor) || '#FFFFFF'
   };
   var series= [{
            name: 'Rainfall',
            type: 'column',
            yAxis: 1,
            data: val2,
            tooltip: {
                valueSuffix: ' mm'
            }

         }, {
            name: 'Temperature',
            type: 'spline',
            data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6],
            tooltip: {
                valueSuffix: '\xB0C'
           }
        }
   ];     

   var json = {};   
   json.chart = chart;   
   json.title = title;
   json.subtitle = subtitle;      
   json.xAxis = xAxis;
   json.yAxis = yAxis;
   json.tooltip = tooltip;  
   json.legend = legend;  
   json.series = series;
   $('#container').highcharts(json);  
});
</script>
    <table id='datatable'>
        <tr><td>Amb Temp</td><td>-40</td><td>-30</td><td>-20</td><td>-10</td><td>0</td><td>10</td><td>-40</td><td>-30</td><td>-20</td><td>-10</td><td>0</td><td>10</td></tr>
        <tr><td>Active</td><td>10.0</td><td>20</td><td>10</td><td>20</td><td>10</td><td>20</td><td>10</td></tr>
        <tr><td>Sleep</td><td>20</td><td>30</td><td>10</td><td>20</td><td>10</td><td>20</td><td>10</td><td>20</td><td>10</td><td>20</td><td>10</td><td>20</td></tr>
    </table>
</body>
</html>`

1 个答案:

答案 0 :(得分:0)

据我所知,确切的问题是数据类型。 Highcharts库正在等待一系列浮点数作为输入数据,并且您正在尝试为其提供一个字符串数组。我对您的代码进行了一些编辑:https://jsfiddle.net/13x2uj7a/2/。在这里,我刚刚在这个块中使用了parseFloat

    $("#datatable tr").eq(1).find('td').each(function(){
        if(header_first){
            header_first = 0;
        }
        else{
            //first_array.push($(this).text());
            val3[i] = parseFloat($(this).text());
            //alert(val3[i]);
            i++;
        }
    })

并且可以从图表中的表格中获取一些数据。