2013-04-09 84 views
2

我想绘制使用谷歌API的折线图。data.addRows不能在谷歌图表工作

但图表没有绘制,我可以确定data.addRows(行)中的一些错误;因为此data.addRows行后面的警报不会弹出。

如果我在data.addRows(rows)之前给出警报,弹出警报。

我不知道这里出了什么问题。任何帮助深表感谢。

<script type="text/javascript"> 
     google.load('visualization', '1.0', {'packages':['corechart']}); 

     function drawLineChart() { 
      var date = 0; 
      var status = 0; 
      var rows = new Array(); 
      var data = new google.visualization.DataTable(); 
      var $attendance_date = new Array(); 
      var $attendance_status = new Array(); 

      $attendance_date[0] = '2004'; 
      $attendance_date[1] = '2005'; 
      $attendance_date[2] = '2006'; 

      $attendance_status[0] = 1; 
      $attendance_status[1] = 3; 
      $attendance_status[2] = 5; 

      rows.push(['Year', 'Sales']); 
      for(var i = 0; i < 3 ; i++) { 
      date = $attendance_date[i]; 
      status = parseInt($attendance_status[i]); 
      rows.push([date, status]); 
      } 

      data.addColumn('string', 'Subject'); 
      // alert(rows); 
      data.addRows(rows); 
      alert(rows); 

      var options = { 
      title: 'My Chart', 
      'width':900, 
      'height':320, 
      'backgroundColor': '#d9d9e4' 
      }; 

      var chart = new google.visualization.LineChart(document.getElementById('chart_attendance_div')); 
      chart.draw(data, options); 
     } 
</script> 

回答

8

有一些问题与你在做什么,让我们一一浏览。

首先,使用addRowaddColumn时,可以使用addColumn命令定义标题。所以,你可以删除以下行:

rows.push(['Year', 'Sales']); 

其次,要定义一个列作为“主题”,当你真的有两列(“年”和“销售”)。你应该定义两列:

data.addColumn('string', 'Year'); 
data.addColumn('number', 'Sales'); 

一旦你这样做,你可以使用addRows命令与最终(工作)代码:

function drawVisualization() { 
    var date = 0; 
    var status = 0; 
    var rows = new Array(); 
    var data = new google.visualization.DataTable(); 
    var $attendance_date = new Array(); 
    var $attendance_status = new Array(); 

    $attendance_date[0] = '2004'; 
    $attendance_date[1] = '2005'; 
    $attendance_date[2] = '2006'; 

    $attendance_status[0] = 1; 
    $attendance_status[1] = 3; 
    $attendance_status[2] = 5; 

    // This line is commented out because it should be deleted 
    // rows.push(['Year', 'Sales']); 
    for(var i = 0; i < 3 ; i++) { 
    date = $attendance_date[i]; 
    status = parseInt($attendance_status[i]); 
    rows.push([date, status]); 
    } 
    // This line is commented out because it should be deleted 
    // data.addColumn('string', 'Subject'); 

    // These lines should be added for column headers 
    data.addColumn('string', 'Year'); 
    data.addColumn('number', 'Sales'); 

    // alert(rows); 
    data.addRows(rows); 
    // alert(rows); 

    var options = { 
    title: 'My Chart', 
    'width':900, 
    'height':320, 
    'backgroundColor': '#d9d9e4' 
    }; 

    var chart = new google.visualization.LineChart(document.getElementById('visualization')); 
    chart.draw(data, options); 
} 

但如果你打算走这么远,你不妨去下一步。现在,您正在创建一个新数组,将其填充到for循环中,并将该数组传递给addRows命令。为什么不剪掉中间人?

 var data = new google.visualization.DataTable(); 
     var $attendance_date = new Array(); 
     var $attendance_status = new Array(); 

     $attendance_date[0] = '2004'; 
     $attendance_date[1] = '2005'; 
     $attendance_date[2] = '2006'; 

     $attendance_status[0] = 1; 
     $attendance_status[1] = 3; 
     $attendance_status[2] = 5; 

     data.addColumn('string', 'Year'); 
     data.addColumn('number', 'Sales'); 

     for(var i = 0; i < 3 ; i++) { 
     data.addRow([$attendance_date[i], parseInt($attendance_status[i])]) 
     } 

Presto,你的代码更简单,你跳过了一个步骤。