На этой странице обсуждается внутреннее представление данных, используемое диаграммами, классы DataTable
и DataView
, используемые для передачи данных в диаграмму, а также различные способы создания экземпляров и заполнения DataTable
.
Содержание
- Как данные представлены на диаграмме
- Какую схему таблицы использует моя диаграмма?
- Таблицы данных и представления данных
- Создание и заполнение таблицы данных
- dataTableToCsv()
- Больше информации
Как данные представлены на диаграмме
Все диаграммы хранят свои данные в таблице. Вот упрощенное представление заполненной таблицы данных с двумя столбцами:
индекс: 0 | индекс: 1 тип: номер метка: «Часов в день» |
---|---|
'Работа' | 11 |
'Есть' | 2 |
'Добираться' | 2 |
'Смотреть телевизор' | 2 |
'Спать' | 7 |
Данные хранятся в ячейках, на которые ссылаются как ( row , columns ), где row — это индекс строки, отсчитываемый от нуля, а столбец — это либо индекс столбца, отсчитываемый от нуля, либо уникальный идентификатор, который вы можете указать.
Вот более полный список поддерживаемых элементов и свойств таблицы; дополнительные сведения см. в разделе «Формат параметра литерала JavaScript конструктора» :
- Таблица — массив столбцов и строк, а также дополнительная карта произвольных пар имя/значение, которые вы можете назначить. Свойства уровня таблицы в настоящее время не используются диаграммами.
- Столбцы . Каждый столбец поддерживает требуемый тип данных, а также необязательную строковую метку, идентификатор, шаблон и карту произвольных свойств имени и значения. Метка представляет собой удобную для пользователя строку, которую можно отобразить на диаграмме; ID — это необязательный идентификатор, который можно использовать вместо индекса столбца. На столбец можно ссылаться в коде либо по индексу, начинающемуся с нуля, либо по дополнительному идентификатору. См.
DataTable.addColumn()
для получения списка поддерживаемых типов данных. - Строки . Строка представляет собой массив ячеек плюс необязательную карту произвольных пар имя/значение, которые вы можете назначить.
- Ячейки . Каждая ячейка представляет собой объект, содержащий фактическое значение типа столбца, а также необязательную версию предоставленного вами значения в строковом формате. Например: числовому столбцу может быть присвоено значение 7 и форматированное значение «семь».
Какую схему таблицы использует моя диаграмма?
В разных диаграммах используются таблицы разных форматов: например, круговая диаграмма предполагает наличие таблицы из двух столбцов со строковым столбцом и числовым столбцом, где каждая строка описывает срез, а первый столбец — это метка среза, а второй столбец — это значение среза. Однако точечная диаграмма предполагает таблицу, состоящую из двух числовых столбцов, где каждая строка представляет собой точку, а два столбца представляют собой значения X и Y точки. Прочтите документацию к вашей диаграмме, чтобы узнать, какой формат данных ей требуется.
Таблицы данных и представления данных
Таблица данных диаграммы представлена в JavaScript либо объектом DataTable
, либо объектом DataView
. В некоторых случаях вы можете увидеть используемый литерал JavaScript или JSON-версию DataTable, например, когда данные отправляются через Интернет с помощью источника данных инструментов диаграммы, или в качестве возможного входного значения для ChartWrapper
.
DataTable
используется для создания исходной таблицы данных. DataView
— это удобный класс, который предоставляет представление DataTable
только для чтения с методами для быстрого скрытия или изменения порядка строк или столбцов без изменения связанных исходных данных. Вот краткое сравнение двух классов:
Таблица данных | Просмотр данных |
---|---|
Читай пиши | Только чтение |
Может быть создан пустым, а затем заполнен | Является ссылкой на существующий DataTable . Невозможно заполнить с нуля; должен быть создан со ссылкой на существующий DataTable . |
Данные занимают место для хранения. | Данные являются ссылкой на существующий DataTable и не занимают места. |
Можно добавлять/редактировать/удалять строки, столбцы и данные; все изменения сохраняются. | Можно сортировать или фильтровать строки без изменения базовых данных. Строки и столбцы можно скрывать и открывать повторно. |
Можно клонировать | Может возвращать версию представления DataTable . |
Есть исходные данные; не содержит ссылок | Живая ссылка на DataTable ; любые изменения в данных DataTable немедленно отражаются в представлении. |
Можно передать в диаграмму в качестве источника данных. | Можно передать в диаграмму в качестве источника данных. |
Не поддерживает вычисляемые столбцы | Поддерживает вычисляемые столбцы, то есть столбцы, значения которых вычисляются «на лету» путем объединения или управления другими столбцами. |
Нет скрытия строк или столбцов | Можно скрыть или показать выбранные столбцы |
Создание и заполнение таблицы данных
Существует несколько различных способов создания и заполнения DataTable:
- Создайте новый DataTable, затем вызовите addColumn()/addRows()/addRow()/setCell().
- массивToDataTable()
- Инициализатор литералов JavaScript
- Отправка запроса к источнику данных
Пустая таблица данных + addColumn()/addRows()/addRow()/setCell()
Шаги:
- Создайте экземпляр нового
DataTable
- Добавить столбцы
- Добавьте одну или несколько строк, при необходимости заполненных данными. Вы можете добавить пустые строки и заполнить их позже. Вы также можете добавлять или удалять дополнительные строки или редактировать значения ячеек по отдельности.
Преимущества:
- Вы можете указать тип данных и метку каждого столбца.
- Подходит для создания таблицы в браузере и менее подвержен опечаткам, чем литеральный метод JSON.
Недостатки:
- Не так полезно, как создание строки-литерала JSON для передачи в конструктор DataTable при программном создании страницы на веб-сервере.
- Зависит от скорости браузера и может быть медленнее, чем литеральные строки JSON с большими таблицами (около 1000+ ячеек).
Примеры:
Вот несколько примеров создания одной и той же таблицы данных с использованием различных вариантов этого метода:
// ------- Version 1------------ // Add rows + data at the same time // ----------------------------- var data = new google.visualization.DataTable(); // Declare columns data.addColumn('string', 'Employee Name'); data.addColumn('datetime', 'Hire Date'); // Add data. data.addRows([ ['Mike', {v:new Date(2008,1,28), f:'February 28, 2008'}], // Example of specifying actual and formatted values. ['Bob', new Date(2007,5,1)], // More typically this would be done using a ['Alice', new Date(2006,7,16)], // formatter. ['Frank', new Date(2007,11,28)], ['Floyd', new Date(2005,3,13)], ['Fritz', new Date(2011,6,1)] ]); // ------- Version 2------------ // Add empty rows, then populate // ----------------------------- var data = new google.visualization.DataTable(); // Add columns data.addColumn('string', 'Employee Name'); data.addColumn('date', 'Start Date'); // Add empty rows data.addRows(6); data.setCell(0, 0, 'Mike'); data.setCell(0, 1, {v:new Date(2008,1,28), f:'February 28, 2008'}); data.setCell(1, 0, 'Bob'); data.setCell(1, 1, new Date(2007, 5, 1)); data.setCell(2, 0, 'Alice'); data.setCell(2, 1, new Date(2006, 7, 16)); data.setCell(3, 0, 'Frank'); data.setCell(3, 1, new Date(2007, 11, 28)); data.setCell(4, 0, 'Floyd'); data.setCell(4, 1, new Date(2005, 3, 13)); data.setCell(5, 0, 'Fritz'); data.setCell(5, 1, new Date(2007, 9, 2));
массивToDataTable()
Эта вспомогательная функция создает и заполняет DataTable
с помощью одного вызова.
Преимущества:
- Очень простой и читаемый код, выполняемый в браузере.
- Вы можете либо явно указать тип данных каждого столбца, либо позволить Google Charts определить тип на основе переданных данных.
- Чтобы явно указать тип данных столбца, укажите объект в строке заголовка с помощью свойства
type
. - Чтобы Google Charts определил тип, используйте строку в качестве метки столбца.
- Чтобы явно указать тип данных столбца, укажите объект в строке заголовка с помощью свойства
Примеры:
var data = google.visualization.arrayToDataTable([ ['Employee Name', 'Salary'], ['Mike', {v:22500, f:'22,500'}], // Format as "22,500". ['Bob', 35000], ['Alice', 44000], ['Frank', 27000], ['Floyd', 92000], ['Fritz', 18500] ], false); // 'false' means that the first row contains labels, not data.
var data = google.visualization.arrayToDataTable([ [ {label: 'Year', id: 'year'}, {label: 'Sales', id: 'Sales', type: 'number'}, // Use object notation to explicitly specify the data type. {label: 'Expenses', id: 'Expenses', type: 'number'} ], ['2014', 1000, 400], ['2015', 1170, 460], ['2016', 660, 1120], ['2017', 1030, 540]]);
Литеральный инициализатор JavaScript
Вы можете передать литеральный объект JavaScript в конструктор таблицы, определяя также схему таблицы и, при необходимости, данные.
Преимущества:
- Полезно при создании данных на вашем веб-сервере.
- Обрабатывается быстрее, чем другие методы, для больших таблиц (около 1000+ ячеек).
Недостатки:
- Синтаксис сложен в правильном понимании и подвержен опечаткам.
- Не очень читаемый код.
- Соблазнительно похоже на JSON, но не идентично.
Пример:
var data = new google.visualization.DataTable( { cols: [{id: 'task', label: 'Employee Name', type: 'string'}, {id: 'startDate', label: 'Start Date', type: 'date'}], rows: [{c:[{v: 'Mike'}, {v: new Date(2008, 1, 28), f:'February 28, 2008'}]}, {c:[{v: 'Bob'}, {v: new Date(2007, 5, 1)}]}, {c:[{v: 'Alice'}, {v: new Date(2006, 7, 16)}]}, {c:[{v: 'Frank'}, {v: new Date(2007, 11, 28)}]}, {c:[{v: 'Floyd'}, {v: new Date(2005, 3, 13)}]}, {c:[{v: 'Fritz'}, {v: new Date(2011, 6, 1)}]} ] } )
Отправка запроса к источнику данных
Когда вы отправляете запрос к источнику данных инструментов диаграмм , успешным ответом является экземпляр DataTable. Этот возвращенный DataTable можно скопировать, изменить или скопировать в DataView так же, как и любой другой DataTable.
function drawVisualization() { var query = new google.visualization.Query( 'http://spreadsheets.google.com/tq?key=pCQbetd-CptGXxxQIG7VFIQ&pub=1'); // Apply query language statement. query.setQuery('SELECT A,D WHERE D > 100 ORDER BY D'); // Send the query with a callback function. query.send(handleQueryResponse); } function handleQueryResponse(response) { if (response.isError()) { alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage()); return; } var data = response.getDataTable(); visualization = new google.visualization.LineChart(document.getElementById('visualization')); visualization.draw(data, {legend: 'bottom'}); }
dataTableToCsv()
Вспомогательная функция google.visualization.dataTableToCsv(
data )
возвращает строку CSV с данными из таблицы данных.
Входными данными для этой функции может быть либо DataTable, либо DataView.
Он использует форматированные значения ячеек. Заголовки столбцов игнорируются.
Специальные символы, такие как " ,
" и " \n
", экранируются с использованием стандартных правил экранирования CSV.
Следующий код отобразит
Ramanujan,1729
Gauss,5050
в консоли JavaScript вашего браузера:
<html> <head> <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script> <script type="text/javascript"> google.charts.load("current", {packages:['corechart']}); google.charts.setOnLoadCallback(drawChart); function drawChart() { var data = google.visualization.arrayToDataTable([ ['Name', 'Number'], ['Ramanujan', 1729], ['Gauss', 5050] ]); var csv = google.visualization.dataTableToCsv(data); console.log(csv); } </script> </head> </html>
Больше информации
- Запрос к источнику данных инструментов диаграмм
- Синтаксис литерала JavaScript DataTable
- Справочник
DataTable
- Справочник по представлению
DataView
- Ссылка
arrayToDataTable()