本頁說明如何載入 Google 圖表程式庫。
基本程式庫載入
除了少數例外狀況,所有含有 Google 圖表的網頁都應在網頁的 <head>
中加入下列行:
<script src="https://www.gstatic.com/charts/loader.js"></script> <script> google.charts.load('current', {packages: ['corechart']}); google.charts.setOnLoadCallback(drawChart); ... </script>
這個範例的第一行會載入載入器本身。無論您打算繪製多少圖表,都只能載入載入器一次。
載入載入器後,您可以呼叫 google.charts.load
函式一次或多次,載入特定圖表類型的套件。
google.charts.load
的第一個引數是版本名稱或編號,以字串表示。如果您指定 'current'
,系統會載入最新的 Google 圖表官方版本。如果您想試用下一個版本的候選版本,請改用 'upcoming'
。一般來說,這兩者之間只會有微幅差異,除非新版本正在推出,否則一切都會完全相同。使用 upcoming
的常見原因是,您想測試 Google 即將在下個月或兩個月內發布的全新圖表類型或功能。(我們會在論壇上公布即將發布的版本,同時建議您在公告發布時進行試用,確保我們接受您對圖表所做的任何變更。)
上述範例假設您要顯示 corechart
(長條圖、柱狀圖、折線圖、面積圖、階梯狀面積圖、氣泡圖、圓餅圖、圓環圖、組合圖、K 線圖、直方圖、散布圖)。如果您想要使用其他或額外的圖表類型,請在上述 corechart
中替換或新增適當的套件名稱 (例如{packages: ['corechart',
'table', 'sankey']}
。您可以在每個圖表的說明文件頁面「Loading」部分找到套件名稱。
這個範例也假設您在網頁中定義了名為 drawChart
的 JavaScript 函式。您可以將該函式命名為任何名稱,但請確保該名稱在全球範圍內不重複,且在您呼叫 google.charts.setOnLoadCallback
時引用該名稱之前已定義。
注意:舊版 Google 圖表使用不同於上述程式碼來載入程式庫。如要更新現有圖表以使用新程式碼,請參閱「更新程式庫載入器程式碼」。
以下是使用基本載入技巧繪製圓餅圖的完整範例:
<head> <script src="https://www.gstatic.com/charts/loader.js"></script> <script> google.charts.load('current', {packages: ['corechart']}); google.charts.setOnLoadCallback(drawChart); function drawChart() { // Define the chart to be drawn. var data = new google.visualization.DataTable(); data.addColumn('string', 'Element'); data.addColumn('number', 'Percentage'); data.addRows([ ['Nitrogen', 0.78], ['Oxygen', 0.21], ['Other', 0.01] ]); // Instantiate and draw the chart. var chart = new google.visualization.PieChart(document.getElementById('myPieChart')); chart.draw(data, null); } </script> </head> <body> <!-- Identify where the chart should be drawn. --> <div id="myPieChart"/> </body>
載入詳細資料
首先,您必須載入載入器本身,這可透過使用 src="https://www.gstatic.com/charts/loader.js"
在個別的 script
標記中完成。這個標記可以位於文件的 head
或 body
中,也可以在載入或載入完成之後,以動態方式插入文件中。
<script src="https://www.gstatic.com/charts/loader.js"></script>
載入器載入後,您可以自由呼叫 google.charts.load
。您可以呼叫 script
標記,在文件的 head
或 body
中呼叫,也可以在文件載入時或載入完成後的任何時間呼叫。
自 45 版起,您可以多次呼叫 google.charts.load
來載入其他套件,但建議您避免這麼做,以確保安全性。每次呼叫時,您都必須提供相同的版本號碼和語言設定。
您現在可以使用舊版 JSAPI autoload
網址參數,但這個參數的值必須使用嚴格的 JSON 格式和網址編碼。在 JavaScript 中,您可以使用以下程式碼對 jsonObject
進行編碼:encodeURIComponent(JSON.stringify(jsonObject))
。
限制
如果您使用 45 版之前的版本,載入 Google 圖表的方式有幾項小但重要的限制:
- 您只能呼叫
google.charts.load
一次。不過,您可以在一個呼叫中列出所需的所有套件,因此不必另外呼叫。 - 如果您使用 ChartWrapper,請務必明確載入所需的所有套件,而不要依賴 ChartWrapper 自動為您載入。
- 如果是 Geochart 和 Map Chart,您必須同時載入舊版程式庫載入器和新版程式庫載入器。請注意,這項操作僅限適用於 v45 以下的版本,且不應用於較新版本。
<script src="https://www.gstatic.com/charts/loader.js"></script> <script src="https://www.google.com/jsapi"></script>
載入版本名稱或編號
google.charts.load
呼叫的第一個引數是版本名稱或編號。目前只有兩個特殊版本名稱和幾個已凍結的版本。
- 執行中
- 這是最新的官方版本,每次發布新版本時都會變更。這個版本經過良好測試,且不含錯誤,但如果您對這個版本的運作情況感到滿意,可能會想要指定特定的凍結版本。
- 近期活動
- 這是下一個版本的內容,目前仍在測試階段,尚未成為正式版本。請定期測試這個版本,以便盡快瞭解是否有任何問題需要在這個版本正式發布前解決。
我們推出新版 Google 圖表時,有些變更會相當重大,例如全新的圖表類型。其他變動則是微小的變動,例如強化現有圖表的外觀或行為。
許多 Google 圖表創作者會精細調整圖表的外觀和風格,直到達到所需的效果為止。有些創作者可能會覺得,無論我們日後做出哪些改善,他們的圖表都不會改變,這會讓他們感到安心。我們支援這些使用者的凍結 Google 圖表。
凍結圖表版本會依編號識別,詳情請參閱官方版本。如要載入已凍結的版本,請將 google.charts.load
呼叫中的 current
或 upcoming
替換為已凍結的版本編號:
<script src="https://www.gstatic.com/charts/loader.js"></script> <script> google.charts.load('43', {packages: ['corechart']}); google.charts.setOnLoadCallback(drawChart); ... </script>
我們預期凍結版本會持續提供,但可能會淘汰有安全性疑慮的凍結版本。我們通常不會為已凍結的版本提供支援,但會建議您升級至較新的版本。
載入設定
google.charts.load
呼叫中的第二個參數是用於指定設定的物件。設定支援下列屬性。
- packages
- 零或多個套件的陣列。每個載入的套件都會包含支援一組功能所需的程式碼,通常是某種圖表。需要載入的套件或套件會列在各圖表類型的說明文件中。如果您使用 ChartWrapper 自動載入所需的資料,可以避免指定任何套件。
- language
- 語言或語言代碼,用於自訂可能會出現在圖表中的文字。詳情請參閱「語言代碼」。
- 回呼
- 載入套件後會呼叫的函式。或者,您也可以按照上述範例呼叫
google.charts.setOnLoadCallback
來指定這個函式。詳情請參閱「回呼」。google.charts.load('current', { packages: [ 'corechart'], callback: drawChart });
- mapsApiKey
- (v45) 您可以使用這個設定指定可搭配 Geochart 和 Map Chart 使用的鍵。建議您採用這種做法,而非使用預設行為,因為後者可能會導致使用者偶爾遭到服務限流。如要瞭解如何設定專屬金鑰,以便使用「Google Maps JavaScript API」服務,請參閱:
取得金鑰/驗證。程式碼會如下所示:
var myMapsApiKey = 'SomeMagicToSetThis'; google.charts.load('45', { packages: [ 'geochart'], mapsApiKey: myMapsApiKey });
- safeMode
- (v47)
如果設為 true,凡是從使用者提供的資料產生 HTML 的圖表和工具提示,都會去除不安全的元素和屬性,藉此清理資料。
或者,您也可以使用接受相同載入設定的捷徑,在安全模式下載程式庫,但一律載入「目前」版本:
google.charts.safeLoad({ packages: ['corechart'] });
語言代碼
「語言代碼」可用來自訂國家/地區或語言的文字,影響貨幣、日期和數字等值的格式。
根據預設,Google 圖表會使用「en」語言代碼載入。如要覆寫這項預設值,請在載入設定中明確指定語言代碼。
如要載入特定語言代碼格式的圖表,請使用 language
設定,如下所示:
// Load Google Charts for the Japanese locale. google.charts.load('current', {'packages':['corechart'], 'language': 'ja'});
回撥電話
您必須先等待載入作業完成,才能使用 google.charts.load
載入的任何套件。等待文件載入完成是不夠的。由於這項載入作業可能需要一段時間才能完成,因此您需要註冊回呼函式。有三種方法可以完成這項操作。在 google.charts.load
呼叫中指定 callback
設定,或呼叫 setOnLoadCallback
並傳遞函式做為引數,或是使用 google.charts.load
呼叫傳回的 Promise。
請注意,無論是上述哪一種方式,您都必須提供函式定義,而非呼叫函式。您提供的函式定義可以是已命名函式 (只需提供名稱) 或匿名函式。套件載入完畢後,不會有引數呼叫這個回呼函式。載入器也會等待文件載入完成,再呼叫回呼。
如果您想繪製多個圖表,可以使用 setOnLoadCallback
註冊多個回呼函式,也可以將這些函式合併為一個函式。進一步瞭解如何
在單一頁面繪製多個圖表。
google.charts.setOnLoadCallback(drawChart1); google.charts.setOnLoadCallback(drawChart2); // OR google.charts.setOnLoadCallback( function() { // Anonymous function that calls drawChart1 and drawChart2 drawChart1(); drawChart2(); });
透過 Promise 回呼
註冊回呼的另一種方式是使用從 google.charts.load
呼叫傳回的 Promise。方法是將呼叫新增至 then()
方法,程式碼如下所示。
google.charts.load('upcoming', {packages: ['corechart']}).then(drawChart);
使用 Promise 的好處之一,就是您只要連結更多 .then(anotherFunction)
呼叫,就能輕鬆繪製更多圖表。使用 Promise 也會將回呼與該回呼所需的特定套件綁定,如果您想透過另一個 google.charts.load()
呼叫載入更多套件,這一點就很重要。
更新程式庫載入器程式碼
舊版 Google 圖表使用不同的程式碼載入程式庫。下表比較舊版與新版的程式庫載入器程式碼。
舊版 LibraryLoader 程式碼 |
---|
<script type="text/javascript" src="https://www.google.com/jsapi"></script> <script type="text/javascript"> google.load("visualization", "1", {packages:["corechart"]}); google.setOnLoadCallback(drawChart); </script> |
新的程式庫載入器程式碼 |
<script src="https://www.gstatic.com/charts/loader.js"></script> <script> google.charts.load('current', {packages: ['corechart']}); google.charts.setOnLoadCallback(drawChart); </script> |
如要更新現有的圖表,您可以將舊的程式庫載入器程式碼替換為新程式碼。不過,請注意上述載入程式庫的限制。