На этой странице обсуждается внутреннее представление данных, используемое диаграммами, классы 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()