Omówienie
Wykres Gantta to typ wykresu ilustrujący podział projektu na zadania składowe. Wykresy Google Gantta ilustrują początek, koniec i czas trwania zadań w projekcie, a także wszelkie zależności, jakie może ono mieć. Wykresy Google Gantta są renderowane w przeglądarce za pomocą SVG. Podobnie jak wszystkie wykresy Google, wykresy Gantta wyświetlają etykietki, gdy użytkownik najedzie na dane.
Uwaga: Wykresy Gantta nie będą działać w starszych wersjach Internet Explorera. (IE8 i starsze wersje nie obsługują SVG, co wymaga wykresów Gantta).
Prosty przykład
<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>
Brak zależności
  Aby utworzyć wykres Gantta bez zależności, upewnij się, że ostatnia wartość każdego wiersza w tabeli danych jest ustawiona na 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>
Grupowanie zasobów
  Zadania o podobnym charakterze można grupować za pomocą zasobów. Dodaj do danych kolumnę typu string (po kolumnach Task ID i Task Name) i sprawdź, czy wszystkie zadania, które mają zostać zgrupowane w zasób, mają ten sam identyfikator zasobu. Zasoby zostaną pogrupowane według koloru.
<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>
Obliczanie rozpoczęcia/zakończenia/czasu trwania
Wykresy Gantta przyjmują 3 wartości związane z czasem trwania zadania: datę rozpoczęcia, datę zakończenia i czas trwania (w milisekundach). Jeśli na przykład nie ma daty rozpoczęcia, wykres może obliczyć brakujący czas na podstawie daty zakończenia i czasu trwania. To samo dotyczy obliczania daty zakończenia. Jeśli podasz zarówno datę rozpoczęcia, jak i datę zakończenia, czas trwania można obliczyć między tymi datami.
W tabeli poniżej znajdziesz listę tego, jak Gant postępuje w przypadku obecności początku, końca i czasu trwania w różnych okolicznościach.
| Uruchom | Zakończ | Czas trwania | Wyniki | 
|---|---|---|---|
| Wyświetl prezentację | Wyświetl prezentację | Wyświetl prezentację | Sprawdź, czy czas trwania jest zgodny z godziną rozpoczęcia i zakończenia. W przypadku niespójności zwraca błąd. | 
| Wyświetl prezentację | Wyświetl prezentację | Null | Oblicza czas trwania od godziny rozpoczęcia i zakończenia. | 
| Wyświetl prezentację | Null | Wyświetl prezentację | Oblicza czas zakończenia. | 
| Wyświetl prezentację | Null | Null | Zgłasza błąd polegający na tym, że nie można obliczyć czasu trwania lub czasu zakończenia. | 
| Null | Wyświetl prezentację | Wyświetl prezentację | Oblicza czas rozpoczęcia. | 
| Null | Null | Wyświetl prezentację | Oblicza czas rozpoczęcia na podstawie zależności. W połączeniu z właściwością defaultStartDateumożliwia rysowanie wykresu tylko przy użyciu czasów trwania. | 
| Null | Wyświetl prezentację | Null | Zgłasza błąd polegający na tym, że nie można obliczyć czasu rozpoczęcia lub czasu trwania. | 
| Null | Null | Null | Zgłasza błąd polegający na tym, że nie można obliczyć czasu rozpoczęcia, zakończenia lub czasu trwania. | 
Mając to na uwadze, możesz utworzyć wykres przedstawiający typową trasę do pracy, wykorzystując tylko czas trwania każdego zadania.
<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>
Ścieżka krytyczna
  Ścieżka krytyczna na wykresie Gantta to ścieżki, które bezpośrednio wpływają na datę zakończenia. Ścieżka krytyczna na wykresach Google Gantta jest domyślnie w kolorze czerwonym. Można ją dostosować za pomocą opcji criticalPathStyle. Ścieżkę krytyczną możesz też wyłączyć, ustawiając criticalPathEnabled na false.
        var options = {
          height: 275,
          gantt: {
            criticalPathEnabled: true,
            criticalPathStyle: {
              stroke: '#e64a19',
              strokeWidth: 5
            }
          }
        };
Strzałki określające style
  Możesz zmienić styl strzałek zależności między zadaniami za pomocą opcji 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
            }
          }
        };
Stylizacja ścieżek
  Style siatki są obsługiwane za pomocą kombinacji atrybutów innerGridHorizLine, innerGridTrack i innerGridDarkTrack. Gdy ustawisz tylko
  innerGridTrack, na wykresie obliczymy ciemniejszy kolor dla
  danych innerGridDarkTrack. Jeśli ustawisz tylko
  kolor innerGridDarkTrack, innerGridTrack użyje koloru domyślnego i nie obliczy koloru jaśniejszego.
      var options = {
        height: 275,
        gantt: {
          criticalPathEnabled: false,
          innerGridHorizLine: {
            stroke: '#ffe0b2',
            strokeWidth: 2
          },
          innerGridTrack: {fill: '#fff3e0'},
          innerGridDarkTrack: {fill: '#ffcc80'}
        }
      };
Wczytuję
  Nazwa pakietu google.charts.load to "gantt".
  google.charts.load("current", {packages: ["gantt"]});
Nazwa klasy wizualizacji to google.visualization.Gantt.
var chart = new google.visualization.Gantt(container);
Format danych
Wiersze: każdy wiersz tabeli odpowiada zadaniu.
Kolumny:
| Kolumna 0 | Kolumna 1 | Kolumna 2 | Kolumna 3 | Kolumna 4 | Kolumna 5 | Kolumna 6 | Kolumna 7 | |
|---|---|---|---|---|---|---|---|---|
| Przeznaczenie: | Identyfikator zadania | Nazwa zadania | Identyfikator zasobu (opcjonalnie) | Uruchom | Zakończ | Czas trwania (w milisekundach) | Procent ukończenia | Zależności | 
| Typ danych: | string, | string, | string, | date | date | Liczba | Liczba | string, | 
| Rola: | domena | dane | dane | dane | dane | dane | dane | dane | 
Opcje konfiguracji
| Nazwa | Typ | Domyślne | Opis | 
|---|---|---|---|
| backgroundColor.fill | string, | 'biały' | Kolor wypełnienia wykresu jako ciąg znaków HTML koloru. | 
| gantt.arrow | obiekt | brak | W przypadku wykresów Gantta zasada gantt.arrowkontroluje różne właściwości strzałek łączących zadania. | 
| gantt.arrow.angle | Liczba | 45 | Kąt łebka strzałki. | 
| gantt.arrow.color | string, | „#000” | Kolor strzałek. | 
| gantt.arrow.length | Liczba | 8 | Długość grotu strzałki. | 
| gantt.arrow.radius | Liczba | 15 | Promień definiowania krzywej strzałki między 2 zadaniami. | 
| gantt.arrow.spaceAfter | Liczba | 4 | Odstęp między głowicą strzałki a zadaniem, do którego ma ona służyć. | 
| gantt.arrow.width | Liczba | 1.4 | Szerokość strzałek. | 
| gantt.barCornerRadius | Liczba | 2 | Promień służący do definiowania krzywej narożników słupka. | 
| gantt.barHeight | Liczba | brak | Wysokość słupków zadań. | 
| gantt.criticalPathEnabled | boolean | prawda | Jeśli true, którekolwiek strzałki na ścieżce krytycznej będą miały inny styl. | 
| gantt.criticalPathStyle | obiekt | brak | Obiekt zawierający styl dla wszystkich strzałek ścieżki krytycznej. | 
| gantt.criticalPathStyle.stroke | string, | brak | Kolor dowolnych strzałek ścieżki krytycznej. | 
| gantt.criticalPathStyle.strokeWidth | Liczba | 1.4 | Grubość wszystkich strzałek krytycznej ścieżki. | 
| gantt.defaultStartDate | data/numer | brak | Jeśli nie można obliczyć daty rozpoczęcia na podstawie wartości w tabeli DataTable, zostanie ona ustawiona na taką datę. Akceptuje wartość date(new Date(YYYY, M, D)) lub liczbę, która jest używana w milisekundach. | 
| gantt.innerGridHorizLine | obiekt | brak | Określa styl wewnętrznych poziomych linii siatki. | 
| gantt.innerGridHorizLine.stroke | string, | brak | Kolor wewnętrznych poziomych linii siatki. | 
| gantt.innerGridHorizLine.strokeWidth | Liczba | 1 | Szerokość wewnętrznych poziomych linii siatki. | 
| gantt.innerGridTrack.fill | string, | brak | Kolor wypełnienia wewnętrznej ścieżki siatki. Jeśli nie określisz elementu innerGridDarkTrack.fill, zostanie on zastosowany do każdej ścieżki siatki. | 
| gantt.innerGridDarkTrack.fill | string, | brak | Kolor wypełnienia innej, ciemnej wewnętrznej ścieżki siatki. | 
| gantt.labelMaxWidth | Liczba | 300 | Maksymalna ilość miejsca na każdą etykietę zadania. | 
| gantt.labelStyle | obiekt | brak | Obiekt zawierający style etykiet zadań. 
labelStyle: {
  fontName: Roboto2,
  fontSize: 14,
  color: '#757575'
},
       | 
| gantt.percentEnabled | boolean | prawda | Wypełnia pasek aplikacji na podstawie odsetka ukończenia zadania. | 
| gantt.percentStyle.fill | string, | brak | Kolor odsetka ukończonych elementów na pasku zadań. | 
| gantt.shadowEnabled | boolean | prawda | Jeśli zasada ma wartość true, pod każdym paskiem zadań, który zawiera zależności, rysuje cień. | 
| gantt.shadowColor | string, | „#000” | Określa kolor cieni pod dowolnym paskiem zadań, w przypadku którego występują zależności. | 
| gantt.shadowOffset | Liczba | 1 | Określa odsunięcie cieni pod paskiem zadań, w przypadku którego występują zależności, w pikselach. | 
| gantt.sortTasks | boolean | prawda | Określa, że zadania powinny być sortowane topologicznie (jeśli jest prawda). W przeciwnym razie używana jest ta sama kolejność co w odpowiednich wierszach tabeli DataTable. | 
| gantt.trackHeight | Liczba | brak | Wysokość torów. | 
| szerokość | Liczba | szerokość elementu | Szerokość wykresu w pikselach. | 
| wysokość | Liczba | wysokość elementu, | wysokość wykresu w pikselach. | 
Metody
| Metoda | Opis | 
|---|---|
| draw(data, options) | 
      Rysuje wykres. Wykres akceptuje kolejne wywołania metod dopiero po wywołaniu zdarzenia  Return Type: brak | 
| getSelection() | 
      Zwraca tablicę wybranych elementów wykresu.
    
      Elementy, które można wybrać, to paski, wpisy z legendy i kategorie.
    
    
    
      Na tym wykresie w danym momencie można wybrać tylko 1 element.
    
      
         Return Type: tablica elementów zaznaczenia. | 
| setSelection() | 
      Wybiera określone elementy wykresu. Anuluje wcześniejszy wybór.
    
      Elementy, które można wybrać, to paski, wpisy z legendy i kategorie.
    
    
    
      Na tym wykresie można wybrać tylko 1 element naraz.
    
      
         Return Type: brak | 
| clearChart() | Czyści wykres i zwalnia wszystkie przydzielone Ci zasoby. Return Type: brak | 
Zdarzenia
| Zdarzenie | Opis | 
|---|---|
| click | Uruchamiane, gdy użytkownik kliknie wykres. Pozwala określić, kiedy klikane są tytuł, elementy danych, wpisy legendy, osie, linie siatki lub etykiety. Właściwości: targetID | 
| error | Uruchamiane, gdy podczas próby wyrenderowania wykresu wystąpi błąd. Właściwości: identyfikator, komunikat | 
| ready | 
      Wykres jest gotowy do obsługi wywołań metod zewnętrznych. Jeśli chcesz korzystać z wykresu i metod wywołań po jego narysowaniu, skonfiguruj detektor tego zdarzenia przed wywołaniem metody  Właściwości: brak | 
| select | 
      Uruchamiane, gdy użytkownik kliknie element wizualny. Aby dowiedzieć się, co zostało wybrane, zadzwoń pod numer  Właściwości: brak | 
Zasady dotyczące danych
Cały kod i dane są przetwarzane i renderowane w przeglądarce. Żadne dane nie są wysyłane na żaden serwer.