圖表繪製技巧

本頁列出在頁面上建立圖表例項及繪製圖表的各種方式。每個方法各有優缺點,如下所示。

目錄

  1. chart.draw()
  2. ChartWrapper
  3. DrawChart()
  4. 更多資訊

chart.draw()

這是本文件中 Hello Chart! 範例中提及的基本方法。以下是基本步驟:

  1. 載入 gstatic 程式庫載入器、Google 視覺化和圖表程式庫
  2. 準備資料
  3. 備妥任何圖表選項
  4. 將圖表類別例項化,並傳入網頁容器元素的控制代碼。
  5. 視需要註冊即可接收任何圖表事件。如果您想呼叫圖表上的方法,則應監聽「Ready」事件。
  6. 呼叫 chart.draw(),傳入資料和選項。

優點:

  • 您可以完全控制流程中的每個步驟。
  • 您可以註冊以監聽圖表擲回的所有事件。

缺點:

  • 詳細
  • 您必須明確載入所有必要的圖表程式庫。
  • 如果您傳送查詢,必須手動實作回呼、檢查成功、擷取傳回的 DataTable,然後傳送至圖表。

範例:

<html>
   
<head>
   
<!--Load the AJAX API-->
   
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
   
<script type="text/javascript">
     
var data;
     
var chart;

     
// Load the Visualization API and the piechart package.
      google
.charts.load('current', {'packages':['corechart']});

     
// Set a callback to run when the Google Visualization API is loaded.
      google
.charts.setOnLoadCallback(drawChart);

     
// Callback that creates and populates a data table,
     
// instantiates the pie chart, passes in the data and
     
// draws it.
     
function drawChart() {

       
// Create our data table.
        data
= new google.visualization.DataTable();
        data
.addColumn('string', 'Topping');
        data
.addColumn('number', 'Slices');
        data
.addRows([
         
['Mushrooms', 3],
         
['Onions', 1],
         
['Olives', 1],
         
['Zucchini', 1],
         
['Pepperoni', 2]
       
]);

       
// Set chart options
       
var options = {'title':'How Much Pizza I Ate Last Night',
                       
'width':400,
                       
'height':300};

       
// Instantiate and draw our chart, passing in some options.
        chart
= new google.visualization.PieChart(document.getElementById('chart_div'));
        google
.visualization.events.addListener(chart, 'select', selectHandler);
        chart
.draw(data, options);
     
}

     
function selectHandler() {
       
var selectedItem = chart.getSelection()[0];
       
var value = data.getValue(selectedItem.row, 0);
        alert
('The user selected ' + value);
     
}

   
</script>
 
</head>
 
<body>
   
<!--Div that will hold the pie chart-->
   
<div id="chart_div" style="width:400; height:300"></div>
 
</body>
</html>

ChartWrapper

ChartWrapper 是便利的類別,可為您載入所有適當的圖表程式庫,並簡化將查詢傳送至圖表工具資料來源。

優點:

  • 程式碼少很多
  • 已為您載入所有必要的圖表程式庫
  • 建立 Query 物件並為您處理回呼,讓查詢資料來源更加輕鬆
  • 傳入容器元素 ID,即可為您呼叫 getElementByID。
  • 資料可透過多種格式提交,包括值陣列、JSON 常值字串,或是 DataTable 處理常式

缺點:

  • ChartWrapper 目前只會傳播選取、就緒和錯誤的事件。如要取得其他事件,您必須取得包裝圖表的控制代碼,並訂閱該圖表的事件。如需示例,請參閱 ChartWrapper 說明文件

例如:

以下柱狀圖範例包含本機建構的資料,指定為陣列。您無法使用陣列語法指定圖表標籤或日期時間值,但可以使用這些值手動建立 DataTable 物件,然後將該物件傳遞至 dataTable 屬性。

<html>
 
<head>
   
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
   
<script type="text/javascript">
      google
.charts.load('current');   // Don't need to specify chart libraries!
      google
.charts.setOnLoadCallback(drawVisualization);

     
function drawVisualization() {
       
var wrapper = new google.visualization.ChartWrapper({
          chartType
: 'ColumnChart',
          dataTable
: [['', 'Germany', 'USA', 'Brazil', 'Canada', 'France', 'RU'],
                     
['', 700, 300, 400, 500, 600, 800]],
          options
: {'title': 'Countries'},
          containerId
: 'vis_div'
       
});
        wrapper
.draw();
     
}
   
</script>
 
</head>
 
<body style="font-family: Arial;border: 0 none;">
   
<div id="vis_div" style="width: 600px; height: 400px;"></div>
 
</body>
</html>

以下是透過查詢 Google 試算表取得資料的折線圖範例。請注意,程式碼不需處理回呼。

<html>
 
<head>
   
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
   
<script type="text/javascript">
      google
.charts.load('current');
      google
.charts.setOnLoadCallback(drawVisualization);

     
function drawVisualization() {
       
var wrapper = new google.visualization.ChartWrapper({
          chartType
: 'LineChart',
          dataSourceUrl
: 'http://spreadsheets.google.com/tq?key=pCQbetd-CptGXxxQIG7VFIQ&pub=1',
          query
: 'SELECT A,D WHERE D > 100 ORDER BY D',
          options
: {'title': 'Countries'},
          containerId
: 'vis_div'
       
});
        wrapper
.draw()

       
// No query callback handler needed!
     
}
   
</script>
 
</head>
 
<body style="font-family: Arial;border: 0 none;">
   
<div id="vis_div" style="width: 600px; height: 400px;"></div>
 
</body>
</html>

結合自動載入功能,可讓程式碼變得非常精簡:

<html>
 
<head>
   
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
   
<script type="text/javascript">
      google
.charts.load('current');   // Don't need to specify chart libraries!
      google
.charts.setOnLoadCallback(drawVisualization);

     
function drawVisualization() {
       
var wrapper = new google.visualization.ChartWrapper({
          chartType
: 'LineChart',
          dataSourceUrl
: 'http://spreadsheets.google.com/tq?key=pCQbetd-CptGXxxQIG7VFIQ&pub=1',
          query
: 'SELECT A,D WHERE D > 100 ORDER BY D',
          options
: {'title': 'Countries'},
          containerId
: 'vis_div'
       
});
        wrapper
.draw()
     
}
   
</script>
 
</head>
 
<body style="font-family: Arial;border: 0 none;">
   
<div id="vis_div" style="width: 600px; height: 400px;"></div>
 
</body>
</html>

搭配 ChartWrapper 使用圖表編輯器

您可以使用 Google 試算表內建的「圖表編輯器」對話方塊設計圖表,然後要求序列化的 ChartWrapper 字串代表圖表。接著,您可以複製及貼上這個字串,然後按照 ChartWrapper 中的說明使用。

您可以在自己的網頁中嵌入圖表編輯器,並向使用者顯示連結其他資料來源及傳回 ChartWrapper 字串的方法。詳情請參閱 ChartEditor 參考說明文件

 

DrawChart()

DrawChart 是包裝 ChartWrapper 的全域靜態方法。

優點:

  • ChartWrapper 相同,但可使用的時間較短。

缺點:

  • 不會向包裝函式傳回控制代碼,因此無法處理任何事件。
<DOCTYPE html>
<html>
 
<head>
   
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
   
<script type="text/javascript">
      google
.charts.load('current');   // Don't need to specify chart libraries!
      google
.charts.setOnLoadCallback(drawVisualization);
     
function drawVisualization() {
        google
.visualization.drawChart({
         
"containerId": "visualization_div",
         
"dataSourceUrl": "https://spreadsheets.google.com/a/google.com/tq?key=pCQbetd-CptGXxxQIG7VFIQ&pub=1",
         
"query":"SELECT A,D WHERE D > 100 ORDER BY D",
         
"refreshInterval": 5,
         
"chartType": "Table",
         
"options": {
           
"alternatingRowStyle": true,
           
"showRowNumber" : true
         
}
       
});
     
}
    google
.charts.setOnLoadCallback(drawVisualization);
   
</script>
 
</head>
 
<body style="font-family: Arial;border: 0 none;">
   
<div id="visualization_div" style="width: 600px; height: 400px;"></div>
 
</body>
</html>

更多資訊