Обзор
Диаграмма Ганта — это тип диаграммы, которая иллюстрирует разбивку проекта на составляющие задачи. Диаграммы Google Ганта иллюстрируют начало, окончание и продолжительность задач в проекте, а также любые зависимости, которые могут иметь задачи. Диаграммы Google Ганта отображаются в браузере с использованием SVG . Как и все диаграммы Google, диаграммы Ганта отображают всплывающие подсказки, когда пользователь наводит курсор на данные.
Примечание. Диаграммы Ганта не работают в старых версиях Internet Explorer. (IE8 и более ранние версии не поддерживают SVG, который требуется для диаграмм Ганта.)
Простой пример
<html>
<head>
  <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
  <script type="text/javascript">
    google.charts.load('current', {'packages':['gantt']});
    google.charts.setOnLoadCallback(drawChart);
    function daysToMilliseconds(days) {
      return days * 24 * 60 * 60 * 1000;
    }
    function drawChart() {
      var data = new google.visualization.DataTable();
      data.addColumn('string', 'Task ID');
      data.addColumn('string', 'Task Name');
      data.addColumn('date', 'Start Date');
      data.addColumn('date', 'End Date');
      data.addColumn('number', 'Duration');
      data.addColumn('number', 'Percent Complete');
      data.addColumn('string', 'Dependencies');
      data.addRows([
        ['Research', 'Find sources',
         new Date(2015, 0, 1), new Date(2015, 0, 5), null,  100,  null],
        ['Write', 'Write paper',
         null, new Date(2015, 0, 9), daysToMilliseconds(3), 25, 'Research,Outline'],
        ['Cite', 'Create bibliography',
         null, new Date(2015, 0, 7), daysToMilliseconds(1), 20, 'Research'],
        ['Complete', 'Hand in paper',
         null, new Date(2015, 0, 10), daysToMilliseconds(1), 0, 'Cite,Write'],
        ['Outline', 'Outline paper',
         null, new Date(2015, 0, 6), daysToMilliseconds(1), 100, 'Research']
      ]);
      var options = {
        height: 275
      };
      var chart = new google.visualization.Gantt(document.getElementById('chart_div'));
      chart.draw(data, options);
    }
  </script>
</head>
<body>
  <div id="chart_div"></div>
</body>
</html>
Нет зависимостей
 Чтобы создать диаграмму Ганта, не имеющую зависимостей, убедитесь, что для последнего значения для каждой строки в DataTable установлено null . 
<html>
<head>
  <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
  <script type="text/javascript">
    google.charts.load('current', {'packages':['gantt']});
    google.charts.setOnLoadCallback(drawChart);
    function drawChart() {
      var data = new google.visualization.DataTable();
      data.addColumn('string', 'Task ID');
      data.addColumn('string', 'Task Name');
      data.addColumn('string', 'Resource');
      data.addColumn('date', 'Start Date');
      data.addColumn('date', 'End Date');
      data.addColumn('number', 'Duration');
      data.addColumn('number', 'Percent Complete');
      data.addColumn('string', 'Dependencies');
      data.addRows([
        ['2014Spring', 'Spring 2014', 'spring',
         new Date(2014, 2, 22), new Date(2014, 5, 20), null, 100, null],
        ['2014Summer', 'Summer 2014', 'summer',
         new Date(2014, 5, 21), new Date(2014, 8, 20), null, 100, null],
        ['2014Autumn', 'Autumn 2014', 'autumn',
         new Date(2014, 8, 21), new Date(2014, 11, 20), null, 100, null],
        ['2014Winter', 'Winter 2014', 'winter',
         new Date(2014, 11, 21), new Date(2015, 2, 21), null, 100, null],
        ['2015Spring', 'Spring 2015', 'spring',
         new Date(2015, 2, 22), new Date(2015, 5, 20), null, 50, null],
        ['2015Summer', 'Summer 2015', 'summer',
         new Date(2015, 5, 21), new Date(2015, 8, 20), null, 0, null],
        ['2015Autumn', 'Autumn 2015', 'autumn',
         new Date(2015, 8, 21), new Date(2015, 11, 20), null, 0, null],
        ['2015Winter', 'Winter 2015', 'winter',
         new Date(2015, 11, 21), new Date(2016, 2, 21), null, 0, null],
        ['Football', 'Football Season', 'sports',
         new Date(2014, 8, 4), new Date(2015, 1, 1), null, 100, null],
        ['Baseball', 'Baseball Season', 'sports',
         new Date(2015, 2, 31), new Date(2015, 9, 20), null, 14, null],
        ['Basketball', 'Basketball Season', 'sports',
         new Date(2014, 9, 28), new Date(2015, 5, 20), null, 86, null],
        ['Hockey', 'Hockey Season', 'sports',
         new Date(2014, 9, 8), new Date(2015, 5, 21), null, 89, null]
      ]);
      var options = {
        height: 400,
        gantt: {
          trackHeight: 30
        }
      };
      var chart = new google.visualization.Gantt(document.getElementById('chart_div'));
      chart.draw(data, options);
    }
  </script>
</head>
<body>
  <div id="chart_div"></div>
</body>
</html>
Группировка ресурсов
 Задачи, схожие по своей природе, можно группировать с помощью ресурсов. Добавьте к своим данным столбец string типа (после столбцов Task ID и Task Name ) и убедитесь, что все задачи, которые должны быть сгруппированы в ресурс, имеют одинаковый идентификатор ресурса. Ресурсы будут сгруппированы по цвету. 
<html>
<head>
  <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
  <script type="text/javascript">
    google.charts.load('current', {'packages':['gantt']});
    google.charts.setOnLoadCallback(drawChart);
    function daysToMilliseconds(days) {
      return days * 24 * 60 * 60 * 1000;
    }
    function drawChart() {
      var data = new google.visualization.DataTable();
      data.addColumn('string', 'Task ID');
      data.addColumn('string', 'Task Name');
      data.addColumn('string', 'Resource');
      data.addColumn('date', 'Start Date');
      data.addColumn('date', 'End Date');
      data.addColumn('number', 'Duration');
      data.addColumn('number', 'Percent Complete');
      data.addColumn('string', 'Dependencies');
      data.addRows([
        ['Research', 'Find sources', null,
         new Date(2015, 0, 1), new Date(2015, 0, 5), null,  100,  null],
        ['Write', 'Write paper', 'write',
         null, new Date(2015, 0, 9), daysToMilliseconds(3), 25, 'Research,Outline'],
        ['Cite', 'Create bibliography', 'write',
         null, new Date(2015, 0, 7), daysToMilliseconds(1), 20, 'Research'],
        ['Complete', 'Hand in paper', 'complete',
         null, new Date(2015, 0, 10), daysToMilliseconds(1), 0, 'Cite,Write'],
        ['Outline', 'Outline paper', 'write',
         null, new Date(2015, 0, 6), daysToMilliseconds(1), 100, 'Research']
      ]);
      var options = {
        height: 275
      };
      var chart = new google.visualization.Gantt(document.getElementById('chart_div'));
      chart.draw(data, options);
    }
  </script>
</head>
<body>
  <div id="chart_div"></div>
</body>
</html>
Вычисление начала/конца/длительности
Диаграммы Ганта принимают три значения, относящиеся к продолжительности задачи: дату начала, дату окончания и продолжительность (в миллисекундах). Если, например, дата начала отсутствует, диаграмма может рассчитать недостающее время на основе даты окончания и продолжительности. То же самое касается расчета даты окончания. Если указаны и дата начала, и дата окончания, продолжительность можно рассчитать между ними.
В таблице ниже показано, как Гантт обрабатывает наличие начала, конца и продолжительности в различных обстоятельствах.
| Начинать | Конец | Продолжительность | Результат | 
|---|---|---|---|
| Подарок | Подарок | Подарок | Убедитесь, что продолжительность соответствует времени начала и окончания. Выдает ошибку, если несовместимо. | 
| Подарок | Подарок | Нулевой | Вычисляет продолжительность от времени начала и окончания. | 
| Подарок | Нулевой | Подарок | Вычисляет время окончания. | 
| Подарок | Нулевой | Нулевой | Выдает ошибку, поскольку невозможно вычислить продолжительность или время окончания. | 
| Нулевой | Подарок | Подарок | Вычисляет время начала. | 
| Нулевой | Нулевой | Подарок | Вычисляет время начала на основе зависимостей. В сочетании с defaultStartDateпозволяет рисовать диаграмму, используя только длительности. | 
| Нулевой | Подарок | Нулевой | Выдает ошибку, поскольку невозможно рассчитать время начала или продолжительность. | 
| Нулевой | Нулевой | Нулевой | Выдает ошибку, поскольку невозможно вычислить время начала, время окончания или продолжительность. | 
Учитывая вышеизложенное, вы можете создать диаграмму, показывающую типичную поездку на работу, используя только продолжительность каждой задачи.
<html>
  <head>
    <script src="https://www.gstatic.com/charts/loader.js"></script>
    <script>
      google.charts.load("current", { packages: ["gantt"] });
      google.charts.setOnLoadCallback(drawChart);
      function toMilliseconds(minutes) {
        return minutes * 60 * 1000;
      }
      function drawChart() {
        var otherData = new google.visualization.DataTable();
        otherData.addColumn("string", "Task ID");
        otherData.addColumn("string", "Task Name");
        otherData.addColumn("string", "Resource");
        otherData.addColumn("date", "Start");
        otherData.addColumn("date", "End");
        otherData.addColumn("number", "Duration");
        otherData.addColumn("number", "Percent Complete");
        otherData.addColumn("string", "Dependencies");
        otherData.addRows([
          [
            "toTrain",
            "Walk to train stop",
            "walk",
            null,
            null,
            toMilliseconds(5),
            100,
            null,
          ],
          [
            "music",
            "Listen to music",
            "music",
            null,
            null,
            toMilliseconds(70),
            100,
            null,
          ],
          [
            "wait",
            "Wait for train",
            "wait",
            null,
            null,
            toMilliseconds(10),
            100,
            "toTrain",
          ],
          [
            "train",
            "Train ride",
            "train",
            null,
            null,
            toMilliseconds(45),
            75,
            "wait",
          ],
          [
            "toWork",
            "Walk to work",
            "walk",
            null,
            null,
            toMilliseconds(10),
            0,
            "train",
          ],
          [
            "work",
            "Sit down at desk",
            null,
            null,
            null,
            toMilliseconds(2),
            0,
            "toWork",
          ],
        ]);
        var options = {
          height: 275,
          gantt: {
            defaultStartDate: new Date(2015, 3, 28),
          },
        };
        var chart = new google.visualization.Gantt(
          document.getElementById("chart_div")
        );
        chart.draw(otherData, options);
      }
    </script>
  </head>
  <body>
    <div id="chart_div"></div>
  </body>
</html>
Критический путь
 Критический путь на диаграмме Ганта — это путь или пути, которые напрямую влияют на дату окончания. Критический путь на диаграммах Ганта Google по умолчанию окрашен в красный цвет, и его можно настроить с помощью параметров criticalPathStyle . Вы также можете отключить критический путь, установив для параметра criticalPathEnabled значение false . 
        var options = {
          height: 275,
          gantt: {
            criticalPathEnabled: true,
            criticalPathStyle: {
              stroke: '#e64a19',
              strokeWidth: 5
            }
          }
        };
Стилизация стрелок
 Вы можете стилизовать стрелки зависимостей между задачами с помощью параметров gantt.arrow : 
        var options = {
          height: 275,
          gantt: {
            criticalPathEnabled: false, // Critical path arrows will be the same as other arrows.
            arrow: {
              angle: 100,
              width: 5,
              color: 'green',
              radius: 0
            }
          }
        };
Стилизация треков
 Стиль сетки обрабатывается комбинацией innerGridHorizLine , innerGridTrack и innerGridDarkTrack . Если установить только innerGridTrack , диаграмма будет рассчитывать более темный цвет для innerGridDarkTrack , но если установить только innerGridDarkTrack , innerGridTrack будет использовать цвет по умолчанию и не будет рассчитывать более светлый цвет. 
      var options = {
        height: 275,
        gantt: {
          criticalPathEnabled: false,
          innerGridHorizLine: {
            stroke: '#ffe0b2',
            strokeWidth: 2
          },
          innerGridTrack: {fill: '#fff3e0'},
          innerGridDarkTrack: {fill: '#ffcc80'}
        }
      };
Загрузка
 Имя пакета google.charts.load — "gantt" .
  google.charts.load("current", {packages: ["gantt"]});
 Имя класса визуализации — google.visualization.Gantt .
var chart = new google.visualization.Gantt(container);
Формат данных
Строки: каждая строка в таблице представляет задачу.
Столбцы:
| Столбец 0 | Столбец 1 | Столбец 2 | Столбец 3 | Столбец 4 | Столбец 5 | Столбец 6 | Столбец 7 | |
|---|---|---|---|---|---|---|---|---|
| Цель: | Идентификатор задачи | Имя задачи | Идентификатор ресурса (необязательно) | Начинать | Конец | Продолжительность (в миллисекундах) | Процент завершения | Зависимости | 
| Тип данных: | нить | нить | нить | дата | дата | число | число | нить | 
| Роль: | домен | данные | данные | данные | данные | данные | данные | данные | 
Варианты конфигурации
| Имя | Тип | По умолчанию | Описание | 
|---|---|---|---|
| фонЦвет.заливка | нить | 'белый' | Цвет заливки диаграммы в виде цветовой строки HTML. | 
| Гантт.Стрелка | объект | нулевой | Для диаграмм Ганта gantt.arrowуправляет различными свойствами стрелок, соединяющих задачи. | 
| Gantt.arrow.angle | число | 45 | Угол головки стрелы. | 
| gant.arrow.color | нить | '#000' | Цвет стрелок. | 
| Gantt.arrow.length | число | 8 | Длина головки стрелы. | 
| gantt.arrow.radius | число | 15 | Радиус для определения кривой стрелки между двумя задачами. | 
| gantt.arrow.spaceAfter | число | 4 | Количество пробелов между наконечником стрелки и задачей, на которую она указывает. | 
| Gantt.arrow.width | число | 1,4 | Ширина стрелок. | 
| gantt.barCornerRadius | число | 2 | Радиус для определения изгиба углов стержня. | 
| gantt.barВысота | число | нулевой | Высота полосок для задач. | 
| gantt.criticalPathEnabled | логическое значение | истинный | Если trueвсе стрелки на критическом пути будут иметь другой стиль. | 
| Gantt.criticalPathStyle | объект | нулевой | Объект, содержащий стиль для всех стрелок критического пути. | 
| gantt.criticalPathStyle.stroke | нить | нулевой | Цвет стрелок критического пути. | 
| gantt.criticalPathStyle.strokeWidth | число | 1,4 | Толщина стрелок критического пути. | 
| gantt.defaultStartDate | дата/номер | нулевой | Если дату начала невозможно вычислить на основе значений в DataTable, в качестве даты начала будет установлено это значение. Принимает значение date(new Date(YYYY, M, D)) или число, обозначающее количество используемых миллисекунд. | 
| gantt.innerGridHorizLine | объект | нулевой | Определяет стиль внутренних горизонтальных линий сетки. | 
| gantt.innerGridHorizLine.stroke | нить | нулевой | Цвет внутренних горизонтальных линий сетки. | 
| gantt.innerGridHorizLine.strokeWidth | число | 1 | Ширина внутренних горизонтальных линий сетки. | 
| gantt.innerGridTrack.fill | нить | нулевой | Цвет заливки внутренней дорожки сетки. Если innerGridDarkTrack.fillне указан, он будет применен к каждой дорожке сетки. | 
| gantt.innerGridDarkTrack.fill | нить | нулевой | Цвет заливки альтернативной темной внутренней дорожки сетки. | 
| gantt.labelMaxWidth | число | 300 | Максимальный объем места, разрешенный для каждой метки задачи. | 
| Gantt.labelStyle | объект | нулевой | Объект, содержащий стили меток задач. 
labelStyle: {
  fontName: Roboto2,
  fontSize: 14,
  color: '#757575'
},
       | 
| gantt.percentEnabled | логическое значение | истинный | Заполняет панель задач в зависимости от процента выполнения задачи. | 
| gantt.percentStyle.fill | нить | нулевой | Цвет процента выполнения части панели задач. | 
| gantt.shadowEnabled | логическое значение | истинный | Если установлено значение true, рисуется тень под каждой панелью задач, которая имеет зависимости. | 
| gantt.shadowColor | нить | '#000' | Определяет цвет теней под любой панелью задач, которая имеет зависимости. | 
| gantt.shadowOffset | число | 1 | Определяет смещение (в пикселях) теней под любой панелью задач, которая имеет зависимости. | 
| gantt.sortЗадачи | логическое значение | истинный | Указывает, что задачи должны быть отсортированы топологически, если это правда; в противном случае используйте тот же порядок, что и соответствующие строки DataTable. | 
| gantt.trackHeight | число | нулевой | Высота дорожек. | 
| ширина | число | ширина содержащего элемента | Ширина диаграммы в пикселях. | 
| высота | число | высота содержащего элемента | высота диаграммы в пикселях. | 
Методы
| Метод | Описание | 
|---|---|
| draw(data, options) |  Рисует диаграмму. Диаграмма принимает дальнейшие вызовы методов только после запуска события   Тип возврата: нет | 
| getSelection() |  Возвращает массив выбранных объектов диаграммы. Выбираемыми объектами являются полосы, записи легенды и категории. Для этой диаграммы в любой момент времени можно выбрать только одну сущность.   Тип возвращаемого значения: Массив элементов выбора. | 
| setSelection() |  Выбирает указанные объекты диаграммы. Отменяет любой предыдущий выбор. Выбираемыми объектами являются полосы, записи легенды и категории. Для этой диаграммы одновременно можно выбрать только одну сущность.   Тип возврата: нет | 
| clearChart() | Очищает диаграмму и освобождает все выделенные ей ресурсы.  Тип возврата: нет  | 
События
| Событие | Описание | 
|---|---|
| click | Запускается, когда пользователь щелкает внутри диаграммы. Может использоваться для определения момента щелчка по заголовку, элементам данных, записям легенды, осям, линиям сетки или меткам.  Свойства: targetID | 
| error | Вызывается, когда возникает ошибка при попытке отобразить диаграмму.  Свойства: идентификатор, сообщение | 
| ready |  Диаграмма готова для вызовов внешних методов. Если вы хотите взаимодействовать с диаграммой и вызывать методы после ее рисования, вам следует настроить прослушиватель этого события до вызова метода   Свойства: нет | 
| select |  Запускается, когда пользователь щелкает визуальный объект. Чтобы узнать, что было выбрано, вызовите   Свойства: нет  | 
Политика данных
Весь код и данные обрабатываются и отображаются в браузере. Никакие данные не отправляются ни на один сервер.