Tổng quan
VegaChart là một trong nhiều hình ảnh trực quan mà bạn có thể tạo ra bằng cách sử dụng Ngữ pháp trực quan hoá Vega, một ngôn ngữ khai báo để tạo, lưu và chia sẻ các thiết kế trực quan mang tính tương tác. Với Vega, bạn có thể mô tả giao diện trực quan và hành vi tương tác của hình ảnh trực quan ở định dạng JSON, đồng thời tạo các chế độ xem dựa trên nền tảng web bằng cách sử dụng Canvas hoặc SVG.
Khi vẽ VegaChart, bạn phải đưa vào trong các tùy chọn một nội dung đặc tả về cách tạo biểu đồ theo ngữ pháp của hình ảnh Vega. Một vài ví dụ về những thông số kỹ thuật đó được bao gồm bên dưới và một vài ví dụ khác có thể được tìm thấy trên trang Ví dụ về VegaChart.
Lưu ý: Mặc dù VegaChart của Google Biểu đồ có thể vẽ bất kỳ biểu đồ Vega nào mà bạn có thể chỉ định bằng Thông số kỹ thuật JSON Vega (bao gồm mọi nội dung trong Thư viện mẫu), nhưng các tính năng bổ sung yêu cầu lệnh gọi đến API Vega chưa được cung cấp.
Một ví dụ đơn giản: Biểu đồ thanh
Dưới đây là một ví dụ đơn giản về VegaChart vẽ Biểu đồ thanh. (Xem ví dụ ban đầu, hướng dẫn chi tiết và Biểu đồ thanh trong trình chỉnh sửa biểu đồ Vega.)
Mặc dù đây là một cách khác để tạo biểu đồ thanh trong Google Biểu đồ, nhưng chúng tôi dự định tích hợp tất cả tính năng của các biểu đồ Thanh và Biểu đồ cột khác vào cách triển khai mới dựa trên VegaChart này.
Trong ví dụ này, hãy lưu ý rằng tuỳ chọn "data" được thay thế bằng thành phần sau, sử dụng "datatable" do lệnh gọi vẽ cung cấp làm "source" cho một đối tượng dữ liệu khác có tên là "table" và "table" (bảng) được dùng trong phần còn lại của quy cách Vega.
'data': [{'name': 'table', 'source': 'datatable'}],
<html> <head> <script src='https://www.gstatic.com/charts/loader.js'></script> <script> google.charts.load('upcoming', {'packages': ['vegachart']}).then(drawChart); function drawChart() { const dataTable = new google.visualization.DataTable(); dataTable.addColumn({type: 'string', 'id': 'category'}); dataTable.addColumn({type: 'number', 'id': 'amount'}); dataTable.addRows([ ['A', 28], ['B', 55], ['C', 43], ['D', 91], ['E', 81], ['F', 53], ['G', 19], ['H', 87], ]); const options = { "vega": { "$schema": "https://vega.github.io/schema/vega/v4.json", "width": 500, "height": 200, "padding": 5, 'data': [{'name': 'table', 'source': 'datatable'}], "signals": [ { "name": "tooltip", "value": {}, "on": [ {"events": "rect:mouseover", "update": "datum"}, {"events": "rect:mouseout", "update": "{}"} ] } ], "scales": [ { "name": "xscale", "type": "band", "domain": {"data": "table", "field": "category"}, "range": "width", "padding": 0.05, "round": true }, { "name": "yscale", "domain": {"data": "table", "field": "amount"}, "nice": true, "range": "height" } ], "axes": [ { "orient": "bottom", "scale": "xscale" }, { "orient": "left", "scale": "yscale" } ], "marks": [ { "type": "rect", "from": {"data":"table"}, "encode": { "enter": { "x": {"scale": "xscale", "field": "category"}, "width": {"scale": "xscale", "band": 1}, "y": {"scale": "yscale", "field": "amount"}, "y2": {"scale": "yscale", "value": 0} }, "update": { "fill": {"value": "steelblue"} }, "hover": { "fill": {"value": "red"} } } }, { "type": "text", "encode": { "enter": { "align": {"value": "center"}, "baseline": {"value": "bottom"}, "fill": {"value": "#333"} }, "update": { "x": {"scale": "xscale", "signal": "tooltip.category", "band": 0.5}, "y": {"scale": "yscale", "signal": "tooltip.amount", "offset": -2}, "text": {"signal": "tooltip.amount"}, "fillOpacity": [ {"test": "datum === tooltip", "value": 0}, {"value": 1} ] } } } ] } }; const chart = new google.visualization.VegaChart(document.getElementById('chart-div')); chart.draw(dataTable, options); } </script> </head> <body> <div id="chart-div" style="width: 700px; height: 250px;"></div> </body> </html>
Đang tải
Tên gói google.charts.load
là "vegachart"
.
google.charts.load("current", {packages: ["vegachart"]});
Tên lớp của hình ảnh trực quan là google.visualization.VegaChart
.
var visualization = new google.visualization.VegaChart(container);
Định dạng dữ liệu
Dữ liệu có thể được chuyển vào VegaChart theo cách rất giống với các Biểu đồ khác của Google bằng cách sử dụng DataTable (hoặc DataView). Điểm khác biệt chính là thay vì dựa vào thứ tự của các cột để xác định cách sử dụng các cột đó, VegaChart sẽ dựa vào mã nhận dạng của mỗi cột giống với mã dự kiến cho hình ảnh Vega cụ thể mà bạn chỉ định.
Ví dụ: DataTable sau đây được tạo với các cột có mã nhận dạng cho 'category'
và 'amount'
, đồng thời các mã nhận dạng đó được dùng trong tuỳ chọn "vega" để tham chiếu đến những cột này.
const dataTable = new google.visualization.DataTable(); dataTable.addColumn({type: 'string', 'id': 'category'}); dataTable.addColumn({type: 'number', 'id': 'amount'}); dataTable.addRows([ ['A', 28], ['B', 55], ['C', 43], ]); const options = { 'vega': { ... // Here we create the Vega data object named 'datatable', // which will be passed in via the draw() call with a DataTable. 'data': {'name': 'datatable'}, 'scales': [ { 'name': 'yscale', // Here is an example of how to use the 'amount' field from 'datatable'. 'domain': {'data': 'datatable', 'field': 'amount'}, } ] } }; const chart = new google.visualization.VegaChart( document.getElementById('chart-div')); chart.draw(dataTable, options);
// A DataTable is required, but it may be empty. const dataTable = new google.visualization.DataTable(); const options = { 'vega': { // Here the data is specified inline in the Vega specification. "data": [ { "name": "table", "values": [ {"category": "A", "amount": 28}, {"category": "B", "amount": 55}, {"category": "C", "amount": 43}, ] } ], 'scales': [ { 'name': 'yscale', // Here is how Vega normally uses the 'amount' field from 'table'. "domain": {"data": "table", "field": "category"}, } ] } }; const chart = new google.visualization.VegaChart( document.getElementById('chart-div')); chart.draw(dataTable, options);
Tuy nhiên, chỉ một DataTable như vậy có thể được chuyển vào VegaChart theo cách này, trong khi một số biểu đồ Vega yêu cầu nhiều bảng dữ liệu. Chúng tôi sẽ giải quyết hạn chế này trong bản phát hành Google Biểu đồ trong tương lai.
Trong thời gian chờ đợi, bạn có thể chỉ định mọi dữ liệu bổ sung cần sử dụng trong tuỳ chọn 'vega'
'data'
, bằng cách đặt nội tuyến dữ liệu đó hoặc tải dữ liệu từ một URL.
Bạn có thể xem ví dụ về cả hai cách này bên dưới.
Các lựa chọn cấu hình
Tên | |
---|---|
chartArea |
Một đối tượng có các thành phần để định cấu hình vị trí và kích thước của vùng biểu đồ (trong đó biểu đồ được vẽ, ngoại trừ các trục và chú giải). Có hai định dạng được hỗ trợ: số hoặc số theo sau là %. Số đơn giản là giá trị tính bằng pixel; số theo sau là % là tỷ lệ phần trăm. Ví dụ: Loại: đối tượng
Mặc định: rỗng
|
chartArea.bottom |
Khoảng cách để vẽ biểu đồ từ đường viền dưới cùng. Loại: số hoặc chuỗi
Mặc định: tự động
|
chartArea.left |
Khoảng cách để vẽ biểu đồ từ đường viền trái. Loại: số hoặc chuỗi
Mặc định: tự động
|
chartArea.right |
Khoảng cách để vẽ biểu đồ từ đường viền phải. Loại: số hoặc chuỗi
Mặc định: tự động
|
chartArea.top |
Khoảng cách để vẽ biểu đồ từ đường viền trên. Loại: số hoặc chuỗi
Mặc định: tự động
|
chartArea.width |
Chiều rộng vùng biểu đồ. Loại: số hoặc chuỗi
Mặc định: tự động
|
chartArea.height |
Chiều cao của vùng biểu đồ. Loại: số hoặc chuỗi
Mặc định: tự động
|
độ cao |
Chiều cao của biểu đồ, tính bằng pixel. Loại: số
Mặc định: chiều cao của phần tử chứa
|
chiều rộng |
Chiều rộng của biểu đồ, tính bằng pixel. Loại: số
Mặc định: chiều rộng của phần tử chứa
|
Phương thức
Phương thức | |
---|---|
draw(data, options) |
Vẽ biểu đồ. Biểu đồ này chỉ chấp nhận các lệnh gọi phương thức khác sau khi kích hoạt sự kiện
Loại trả lại: không có
|
getAction(actionID) |
Trả về đối tượng hành động trong chú giải công cụ với Loại dữ liệu trả về: đối tượng
|
getBoundingBox(id) |
Trả về một đối tượng chứa bên trái, trên cùng, chiều rộng và chiều cao của phần tử biểu đồ
Các giá trị liên quan đến vùng chứa của biểu đồ. Gọi lệnh này sau khi biểu đồ được vẽ. Loại dữ liệu trả về: đối tượng
|
getChartAreaBoundingBox() |
Trả về một đối tượng chứa bên trái, trên cùng, chiều rộng và chiều cao của nội dung biểu đồ (tức là không bao gồm nhãn và chú giải):
Các giá trị liên quan đến vùng chứa của biểu đồ. Gọi lệnh này sau khi biểu đồ được vẽ. Loại dữ liệu trả về: đối tượng
|
getChartLayoutInterface() |
Trả về một đối tượng chứa thông tin về vị trí trên màn hình của biểu đồ và các phần tử của biểu đồ đó. Bạn có thể gọi các phương thức sau trên đối tượng được trả về:
Gọi lệnh này sau khi biểu đồ được vẽ. Loại dữ liệu trả về: đối tượng
|
getHAxisValue(xPosition, optional_axis_index) |
Trả về giá trị dữ liệu theo chiều ngang tại Ví dụ: Gọi lệnh này sau khi biểu đồ được vẽ. Loại trả về: số
|
getImageURI() |
Trả về biểu đồ được chuyển đổi tuần tự dưới dạng URI hình ảnh. Gọi lệnh này sau khi biểu đồ được vẽ. Xem In biểu đồ PNG. Loại dữ liệu trả về: chuỗi
|
getSelection() |
Trả về một mảng gồm các thực thể biểu đồ đã chọn.
Đối với biểu đồ này, bạn chỉ có thể chọn một thực thể tại một thời điểm bất kỳ.
Loại dữ liệu trả về: Mảng gồm các phần tử lựa chọn
|
getVAxisValue(yPosition, optional_axis_index) |
Trả về giá trị dữ liệu ngành dọc tại Ví dụ: Gọi lệnh này sau khi biểu đồ được vẽ. Loại trả về: số
|
getXLocation(dataValue, optional_axis_index) |
Trả về toạ độ x của điểm ảnh Ví dụ: Gọi lệnh này sau khi biểu đồ được vẽ. Loại trả về: số
|
getYLocation(dataValue, optional_axis_index) |
Trả về toạ độ pixel y của Ví dụ: Gọi lệnh này sau khi biểu đồ được vẽ. Loại trả về: số
|
removeAction(actionID) |
Xoá hành động trong chú giải công cụ với Loại trả lại hàng:
none |
setAction(action) |
Đặt một hành động trong chú giải công cụ cần thực thi khi người dùng nhấp vào văn bản hành động.
Phương thức
Bạn phải đặt mọi thao tác trong chú thích công cụ trước khi gọi phương thức Loại trả lại hàng:
none |
setSelection() |
Chọn các thực thể biểu đồ đã chỉ định. Huỷ mọi lựa chọn trước đó.
Đối với biểu đồ này, mỗi lần bạn chỉ có thể chọn một thực thể.
Loại trả lại: không có
|
clearChart() |
Xoá biểu đồ và giải phóng tất cả tài nguyên đã phân bổ của biểu đồ đó. Loại trả lại: không có
|
Sự kiện
Để biết thêm thông tin về cách sử dụng những sự kiện này, hãy xem bài viết Tương tác cơ bản, Xử lý sự kiện và Sự kiện kích hoạt.
Tên | |
---|---|
animationfinish |
Được kích hoạt khi ảnh động chuyển đổi hoàn tất. Thuộc tính: không có
|
click |
Được kích hoạt khi người dùng nhấp vào bên trong biểu đồ. Thông tin này có thể được dùng để xác định thời điểm người dùng nhấp vào tiêu đề, phần tử dữ liệu, mục chú giải, trục, đường lưới hoặc nhãn. Tài sản: targetID
|
error |
Được kích hoạt khi xảy ra lỗi khi cố gắng hiển thị biểu đồ. Thuộc tính: mã nhận dạng, thông báo
|
legendpagination |
Được kích hoạt khi người dùng nhấp vào mũi tên phân trang của chú giải. Trả về chỉ mục trang hiện tại từ 0 của chú giải và tổng số trang. Tài sản: currentPageIndex, totalPages
|
onmouseover |
Được kích hoạt khi người dùng di chuột qua một thực thể hình ảnh. Trả về các chỉ mục hàng và cột của phần tử tương ứng trong bảng dữ liệu. Tài sản: hàng, cột
|
onmouseout |
Được kích hoạt khi người dùng di chuột ra khỏi một thực thể trực quan. Trả về các chỉ mục hàng và cột của phần tử tương ứng trong bảng dữ liệu. Tài sản: hàng, cột
|
ready |
Biểu đồ này đã sẵn sàng cho các lệnh gọi phương thức bên ngoài. Nếu muốn tương tác với biểu đồ và gọi các phương thức sau khi vẽ, bạn nên thiết lập trình nghe cho sự kiện này trước khi gọi phương thức Thuộc tính: không có
|
select |
Được kích hoạt khi người dùng nhấp vào một thực thể hình ảnh. Để tìm hiểu những mục đã được chọn, hãy gọi hàm
Thuộc tính: không có
|
Chính sách về dữ liệu
Tất cả mã và dữ liệu đều được xử lý và hiển thị trong trình duyệt. Không có dữ liệu nào được gửi đến bất kỳ máy chủ nào.