Обзор
VegaChart — это одна из многих возможных визуализаций, которые можно создать с помощью грамматики визуализации Vega , которая представляет собой декларативный язык для создания, сохранения и обмена проектами интерактивных визуализаций. С помощью Vega вы можете описывать внешний вид и интерактивное поведение визуализации в формате JSON, а также создавать веб-представления с помощью Canvas или SVG.
При рисовании VegaChart вы должны включить в параметры спецификацию построения диаграммы в грамматике визуализации Vega. Несколько примеров таких спецификаций приведены ниже, а еще несколько примеров можно найти на странице примеров VegaChart .
Примечание. Хотя Google Charts VegaChart может отображать любую диаграмму Vega, которую вы можете указать с помощью спецификации Vega JSON (включая все, что есть в галерее примеров ), дополнительные функции, требующие вызовов API Vega , пока недоступны.
Простой пример: гистограмма
Вот простой пример VegaChart, который рисует гистограмму. (См. исходный пример , подробное руководство и гистограмму в редакторе диаграмм Vega .)
Хотя это представляет собой еще один способ создания гистограммы в Google Charts, мы планируем интегрировать все функции других гистограмм и столбчатых диаграмм в новую реализацию, основанную на этой VegaChart.
В этом примере обратите внимание, что опция «данные» заменяется следующей, которая использует «таблицу данных», предоставленную вызовом отрисовки, в качестве «источника» для другого объекта данных, называемого «таблица», а «таблица» используется в остальная часть спецификации 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>
Загрузка
Имя пакета google.charts.load
— "vegachart"
.
google.charts.load("current", {packages: ["vegachart"]});
Имя класса визуализации — google.visualization.VegaChart
.
var visualization = new google.visualization.VegaChart(container);
Формат данных
Данные можно передавать в VegaChart аналогично другим диаграммам Google, используя DataTable (или DataView). Основное отличие заключается в том, что вместо того, чтобы полагаться на порядок столбцов при определении того, как они используются, VegaChart полагается на то, что идентификатор каждого столбца совпадает с ожидаемым для конкретной указанной вами визуализации Vega. Например, следующий DataTable создается со столбцами, имеющими идентификаторы для 'category'
и 'amount'
, и те же идентификаторы используются в параметре «vega» для ссылки на эти столбцы.
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);
Однако таким образом в VegaChart можно передать только один такой DataTable, тогда как для некоторых диаграмм Vega требуется более одной таблицы данных. Мы устраним это ограничение в будущей версии Google Charts.
Тем временем вы можете указать любые дополнительные данные, которые вам нужно использовать, в опции « 'data'
'vega'
», либо встроив их, либо загрузив по URL-адресу. Примеры того и другого можно найти ниже.
Параметры конфигурации
Имя | |
---|---|
область диаграммы | Объект с элементами для настройки размещения и размера области диаграммы (где рисуется сама диаграмма, исключая оси и легенды). Поддерживаются два формата: число или число, за которым следует %. Простое число — это значение в пикселях; число, за которым следует %, представляет собой процент. Пример: Тип: объект По умолчанию: ноль |
диаграммаArea.bottom | На каком расстоянии рисовать диаграмму от нижней границы. Тип: число или строка. По умолчанию: авто |
диаграммаArea.left | Насколько далеко рисовать диаграмму от левой границы. Тип: число или строка. По умолчанию: авто |
ChartArea.right | Насколько далеко рисовать диаграмму от правой границы. Тип: число или строка. По умолчанию: авто |
диаграммаArea.top | На каком расстоянии рисовать диаграмму от верхней границы. Тип: число или строка. По умолчанию: авто |
ChartArea.width | Ширина области диаграммы. Тип: число или строка. По умолчанию: авто |
диаграммаArea.height | Высота области диаграммы. Тип: число или строка. По умолчанию: авто |
высота | Высота диаграммы в пикселях. Тип: номер По умолчанию: высота содержащего элемента. |
ширина | Ширина диаграммы в пикселях. Тип: номер По умолчанию: ширина содержащего элемента. |
Методы
Метод | |
---|---|
draw(data, options) | Рисует диаграмму. Диаграмма принимает дальнейшие вызовы методов только после запуска события Тип возврата: нет |
getAction(actionID) | Возвращает объект действия всплывающей подсказки с запрошенным Тип возвращаемого значения: объект |
getBoundingBox(id) | Возвращает объект, содержащий
Значения относятся к контейнеру диаграммы. Вызовите это после того, как диаграмма будет нарисована. Тип возвращаемого значения: объект |
getChartAreaBoundingBox() | Возвращает объект, содержащий левую, верхнюю, ширину и высоту содержимого диаграммы (т. е. исключая метки и легенду):
Значения относятся к контейнеру диаграммы. Вызовите это после того, как диаграмма будет нарисована. Тип возвращаемого значения: объект |
getChartLayoutInterface() | Возвращает объект, содержащий информацию о расположении диаграммы и ее элементов на экране. К возвращаемому объекту можно вызвать следующие методы:
Вызовите это после того, как диаграмма будет нарисована. Тип возвращаемого значения: объект |
getHAxisValue(xPosition, optional_axis_index) | Возвращает значение горизонтальных данных в Пример: Вызовите это после того, как диаграмма будет нарисована. Тип возврата: число |
getImageURI() | Возвращает диаграмму, сериализованную как URI изображения. Вызовите это после того, как диаграмма будет нарисована. См. Печать диаграмм PNG . Тип возвращаемого значения: строка |
getSelection() | Возвращает массив выбранных объектов диаграммы. Для этой диаграммы в любой момент времени можно выбрать только одну сущность. Тип возвращаемого значения: Массив элементов выбора. |
getVAxisValue(yPosition, optional_axis_index) | Возвращает значение вертикальных данных в Пример: Вызовите это после того, как диаграмма будет нарисована. Тип возврата: число |
getXLocation(dataValue, optional_axis_index) | Возвращает координату x в пикселях Пример: Вызовите это после того, как диаграмма будет нарисована. Тип возврата: число |
getYLocation(dataValue, optional_axis_index) | Возвращает координату y в пикселях Пример: Вызовите это после того, как диаграмма будет нарисована. Тип возврата: число |
removeAction(actionID) | Удаляет действие всплывающей подсказки с запрошенным Тип возврата: none |
setAction(action) | Устанавливает действие всплывающей подсказки, которое будет выполняться, когда пользователь нажимает на текст действия. Метод Любые действия подсказки должны быть установлены до вызова метода Тип возврата: none |
setSelection() | Выбирает указанные объекты диаграммы. Отменяет любой предыдущий выбор. Для этой диаграммы одновременно можно выбрать только одну сущность. Тип возврата: нет |
clearChart() | Очищает диаграмму и освобождает все выделенные ей ресурсы. Тип возврата: нет |
События
Дополнительные сведения о том, как использовать эти события, см. в разделах «Базовое взаимодействие» , «Обработка событий» и «Инициирование событий» .
Имя | |
---|---|
animationfinish | Запускается, когда анимация перехода завершена. Свойства: нет |
click | Запускается, когда пользователь щелкает внутри диаграммы. Может использоваться для определения момента щелчка по заголовку, элементам данных, записям легенды, осям, линиям сетки или меткам. Свойства: целевойID |
error | Вызывается, когда возникает ошибка при попытке отобразить диаграмму. Свойства: идентификатор, сообщение |
legendpagination | Вызывается, когда пользователь нажимает стрелки нумерации страниц легенды. Возвращает текущий индекс страницы легенды, отсчитываемый от нуля, и общее количество страниц. Свойства: currentPageIndex, totalPages. |
onmouseover | Вызывается, когда пользователь наводит указатель мыши на визуальный объект. Возвращает индексы строк и столбцов соответствующего элемента таблицы данных. Свойства: строка, столбец |
onmouseout | Вызывается, когда пользователь уводит указатель мыши от визуального объекта. Возвращает индексы строк и столбцов соответствующего элемента таблицы данных. Свойства: строка, столбец |
ready | Диаграмма готова для вызовов внешних методов. Если вы хотите взаимодействовать с диаграммой и вызывать методы после ее рисования, вам следует настроить прослушиватель этого события до вызова метода Свойства: нет |
select | Запускается, когда пользователь щелкает визуальный объект. Чтобы узнать, что было выбрано, вызовите Свойства: нет |
Политика данных
Весь код и данные обрабатываются и отображаются в браузере. Никакие данные не отправляются ни на один сервер.