Omówienie
Wykres Gantta to typ wykresu, który pokazuje rozbicie projektu na jego zadania składowe. Wykresy Gantta pokazują początkowe, końcowe i czasy trwania zadań w projekcie oraz pokazują ich zależności. Wykresy Google Gantt są renderowane w przeglądarce za pomocą SVG. Podobnie jak w przypadku wszystkich wykresów Google, gdy użytkownik najedzie kursorem na dane, Gantt wyświetla podpowiedzi.
Uwaga: wykresy Gantta nie będą działać w starszych wersjach Internet Explorera. (IE8 i starsze wersje nie obsługują SVG, co jest wymagane na wykresach 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, który nie wymaga zależności, sprawdź, czy ostatnia wartość w każdym wierszu 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 powinny zostać pogrupowane w zasobie, 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 akceptują 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 obliczenia daty zakończenia. Jeśli podasz zarówno datę rozpoczęcia, jak i zakończenia, czas trwania może zostać obliczony między nimi.
W tabeli poniżej znajdziesz listę sposobów, w jakie Gantt obsługuje obecność początku, końca i czasu trwania w różnych okolicznościach.
Uruchom | Koniec | Czas trwania | Wynik |
---|---|---|---|
Czas teraźniejszy | Czas teraźniejszy | Czas teraźniejszy | Sprawdź, czy czas trwania jest zgodny z czasem rozpoczęcia/zakończenia. Wyrzuca błąd, jeśli jest niespójny. |
Czas teraźniejszy | Czas teraźniejszy | Null | Określa czas trwania od godziny rozpoczęcia do zakończenia. |
Czas teraźniejszy | Null | Czas teraźniejszy | Oblicza czas zakończenia. |
Czas teraźniejszy | Null | Null | Zgłasza błąd, bo nie można obliczyć czasu trwania lub czasu zakończenia. |
Null | Czas teraźniejszy | Czas teraźniejszy | Oblicza czas rozpoczęcia. |
Null | Null | Czas teraźniejszy |
Oblicza czas rozpoczęcia na podstawie zależności. W połączeniu z zasadą defaultStartDate umożliwia rysowanie wykresu tylko z użyciem czasów trwania.
|
Null | Czas teraźniejszy | Null | Wyświetla błąd, bo nie można obliczyć czasu rozpoczęcia ani czasu trwania. |
Null | Null | Null | Wyświetla błąd, bo nie można obliczyć czasu rozpoczęcia, zakończenia ani czasu trwania. |
Biorąc pod uwagę powyższe informacje, możesz utworzyć wykres przedstawiający typowy dojazd 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 wykresu Gantta to ścieżki, które bezpośrednio wpływają na datę zakończenia. Ścieżka krytyczna na wykresach Google Gantt jest domyślnie oznaczona kolorem czerwonym i można ją dostosować za pomocą opcji criticalPathStyle
. Możesz też wyłączyć ścieżkę krytyczną, ustawiając criticalPathEnabled
na false
.
var options = { height: 275, gantt: { criticalPathEnabled: true, criticalPathStyle: { stroke: '#e64a19', strokeWidth: 5 } } };
Strzałki stylu
Za pomocą opcji gantt.arrow
możesz zmienić styl zależności między zadaniami:
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 } } };
Ścieżki stylu
Styl siatki jest obsługiwany przez kombinację innerGridHorizLine
, innerGridTrack
i innerGridDarkTrack
. Gdy ustawisz tylko wartość innerGridTrack
, wykres będzie obliczać ciemniejszy kolor
innerGridDarkTrack
, ale jeśli ustawisz tylko wartość innerGridDarkTrack
, innerGridTrack
będzie używać koloru domyślnego, a nie 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 w tabeli odpowiada zadanie.
Kolumny:
Kolumna 0 | Kolumna 1 | Kolumna 2 | Kolumna 3 | Kolumna 4 | Kolumna 5 | Kolumna 6 | Kolumna 7 | |
---|---|---|---|---|---|---|---|---|
Cel: | Identyfikator zadania | Nazwa zadania | Identyfikator zasobu (opcjonalnie) | Uruchom | Koniec | Czas trwania (w milisekundach) | Procent ukończony | Zależności |
Typ danych: | tekst | tekst | tekst | data | data | liczba | liczba | tekst |
Rola: | domena | dane | dane | dane | dane | dane | dane | dane |
Opcje konfiguracji
Nazwa | Typ | Domyślna | Opis |
---|---|---|---|
backgroundColor.fill | tekst | 'biały' | Kolor wypełnienia wykresu w postaci koloru HTML. |
Gangttarrow | obiekt | brak |
W przypadku wykresów szczegółowych gantt.arrow określa różne właściwości strzałek łączących zadania.
|
gantt.arrow.angle, | liczba | 45 | Kąt grotu strzałki. |
gantt.arrow.color | tekst | „#000” | Kolor strzałek. |
Gangtt.arrow.length | liczba | 8 | Długość grotu strzałki. |
Gangttarrow | liczba | 15 | Promień definiowania krzywej między 2 zadaniami. |
gantt.arrow.spaceAfter | liczba | 4 | Wielkość odstępu między strzałką a zadaniem, na które wskazuje. |
gantt.arrow.width | liczba | 1.4 | Szerokość strzałek. |
Gangtt.barCornerRadius | liczba | 2 | Promień wyznaczający krzywe narożników słupka. |
gantt.barHeight, | liczba | brak | Wysokość słupków zadań. |
gantt.krytyczneścieżka włączona | wartość logiczna | prawda |
Jeśli true ma strzałki w krytycznej ścieżce, ich styl jest inny.
|
gantt.krytyczneŚcieżkaŚcieżka | obiekt | brak | Obiekt zawierający styl dowolnych strzałek ścieżki krytycznej. |
gantt.krytyczneŚcieżkaŚcieżka.Styl | tekst | brak | Kolor wszystkich strzałek ścieżki krytycznej. |
gantt.krytyczneŚcieżkaŚcieżka.StylSzerokość | liczba | 1.4 | Grubość strzałek o znaczeniu krytycznym. |
gantt.defaultStartDate | data/liczba | brak |
Jeśli nie można obliczyć daty początkowej na podstawie wartości w tabeli danych, data rozpoczęcia zostanie ustawiona na tę datę. Może mieć wartość date (new Date(YYYY, M, D) ) lub liczbę (w milisekundach).
|
Gangtt.innerGridHorizLine | obiekt | brak | Określa styl wewnętrznych poziomych linii siatki. |
gantt.innerGridHorizLine.style | tekst | brak | Kolor poziomych linii siatki. |
gantt.innerGridHorizLine.rayWidth, | liczba | 1 | Szerokość wewnętrznych poziomych linii siatki. |
gantt.innerGridTrack.fill | tekst | brak |
Kolor wypełnienia wewnętrznej siatki. Jeśli nie określono właściwości innerGridDarkTrack.fill , będzie ona stosowana do każdej ścieżki siatki.
|
gantt.innerGridDarkTrack.fill | tekst | brak | Kolor wypełnienia alternatywnej, ciemnej ścieżki siatki. |
gantt.labelMaxWidth, | liczba | 300 | Maksymalna dozwolona 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 | wartość logiczna | prawda | Wypełnia pasek zadań na podstawie wartości procentowej wykonanego zadania. |
gantt.percentStyle.fill, | tekst | brak | Kolor wartości procentowej ukończonej części paska zadań. |
gantt.shadowEnabled | wartość logiczna | prawda |
Jeśli ma wartość true , na każdym pasku zadań rysowany jest cień, który zawiera zależności.
|
gantt.shadowColor, | tekst | „#000” | Określa kolor cieni znajdujący się pod paskiem zadań z zależnościami. |
Gangtt.shadowOffset | liczba | 1 | Określa przesunięcie cieni (w pikselach) na dowolnym pasku zadań zawierającym zależności. |
gantt.sortTasks. | wartość logiczna | prawda | Określa, że zadania powinny być sortowane topologicznie, jeśli są poprawne. W przeciwnym razie użyj tej samej kolejności co w odpowiednich wierszach tabeli danych. |
gantt.trackHeight, | liczba | brak | Wysokość ścieżek. |
szerokość | liczba | szerokość elementu zawierającego dane | Szerokość wykresu w pikselach. |
wysokość | liczba | wysokość elementu zawierającego | wysokość wykresu podana w pikselach. |
Metody
Metoda | Opis |
---|---|
draw(data, options) |
Rysuje wykres. Wykres akceptuje dalsze wywołania metody dopiero po wywołaniu zdarzenia Typ zwrotu: brak
|
getSelection() |
Zwraca tablicę wybranych elementów wykresu.
Elementy, które można wybrać, to paski, legendy i kategorie.
Na tym wykresie w danym momencie możesz wybrać tylko 1 element.
Typ zwrotu: tablica elementów wyboru.
|
setSelection() |
Zaznacza określone elementy wykresu. Anuluje poprzedni wybór.
Elementy, które można wybrać, to paski, legendy i kategorie.
Na tym wykresie możesz wybrać tylko jeden element naraz.
Typ zwrotu: brak
|
clearChart() |
Czyści wykres i usuwa wszystkie przydzielone zasoby. Typ zwrotu: brak
|
Zdarzenia
Zdarzenie | Opis |
---|---|
click |
Uruchamiane, gdy użytkownik kliknie wykres. Można jej użyć do określenia, kiedy kliknięty jest tytuł, elementy danych, wpisy legendy, osie, linie siatki lub etykiety. Właściwości: targetID
|
error |
Uruchamiane, gdy podczas próby renderowania wykresu wystąpi błąd. Właściwości: id, message
|
ready |
Wykres jest gotowy do wywołań metod zewnętrznych. Jeśli chcesz korzystać z wykresu i metod wywoływania po narysowaniu, musisz skonfigurować odbiornik 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 do żadnego serwera.