Descripción general
Un diagrama de Gantt es un tipo de diagrama que ilustra el desglose de un proyecto en las tareas que lo componen. Los diagramas de Gantt de Google ilustran el inicio, el final y la duración de las tareas dentro de un proyecto, así como las dependencias que pueda tener una tarea. Los gráficos de Gantt de Google se procesan en el navegador mediante SVG. Al igual que todos los gráficos de Google, los diagramas de Gantt muestran información sobre la herramienta cuando el usuario coloca el cursor sobre los datos.
Nota: Los diagramas de Gantt no funcionarán en las versiones anteriores de Internet Explorer. (IE8 y las versiones anteriores no admiten archivos SVG, que es necesario para los gráficos de Gantt).
Un ejemplo simple
<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>
Sin dependencias
Para crear un diagrama de Gantt que no tenga dependencias, asegúrate de que el último valor de cada fila en tu DataTable esté configurado como 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>
Cómo agrupar recursos
Las tareas que son de naturaleza similar se pueden agrupar usando recursos. Agrega una columna de tipo string
a tus datos (después de las columnas Task ID
y Task Name
) y asegúrate de que las tareas que deben agruparse en un recurso tengan el mismo ID de recurso. Los recursos se agruparán por color.
<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>
Inicio, finalización o duración del procesamiento
Los diagramas de Gantt aceptan tres valores relacionados con la duración de la tarea: una fecha de inicio, una fecha de finalización y una duración (en milisegundos). Por ejemplo, si no hay una fecha de inicio, el gráfico puede calcular la hora faltante según la fecha de finalización y la duración. Lo mismo se aplica para calcular la fecha de finalización. Si se proporcionan las fechas de inicio y finalización, la duración se puede calcular entre ambas.
Consulta la siguiente tabla para obtener una lista de cómo Gantt maneja la presencia del inicio, la finalización y la duración en diferentes circunstancias.
Iniciar | Fin | Duración | Resultado |
---|---|---|---|
Presentar | Presentar | Presentar | Compruebe que la duración sea coherente con las horas de inicio y finalización. Muestra un error si no son coherentes. |
Presentar | Presentar | Nulo | Calcula la duración desde las horas de inicio y finalización. |
Presentar | Nulo | Presentar | Calcula la hora de finalización. |
Presentar | Nulo | Nulo | Muestra el error como que no puede calcular la duración o la hora de finalización. |
Nulo | Presentar | Presentar | Calcula la hora de inicio. |
Nulo | Nulo | Presentar |
Calcula la hora de inicio según las dependencias. Junto con defaultStartDate , permite que el gráfico se dibuje solo con las duraciones.
|
Nulo | Presentar | Nulo | Muestra el error como que no se puede calcular la hora de inicio o la duración. |
Nulo | Nulo | Nulo | Muestra el error como que no se puede calcular la hora de inicio, la hora de finalización o la duración. |
Teniendo en cuenta lo anterior, puedes crear un gráfico que indique un viaje diario típico al trabajo y ten en cuenta solo la duración de cada tarea.
<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>
Ruta crítica
La ruta crítica en un diagrama de Gantt es la ruta, o rutas, que afectan directamente la fecha de finalización. La ruta crítica en los diagramas de Gantt de Google se muestra de color rojo de forma predeterminada y se puede personalizar con las opciones de criticalPathStyle
. También puedes desactivar la ruta crítica estableciendo criticalPathEnabled
en false
.
var options = { height: 275, gantt: { criticalPathEnabled: true, criticalPathStyle: { stroke: '#e64a19', strokeWidth: 5 } } };
Cómo aplicar diseño a las flechas
Puedes aplicar diseño a las flechas de dependencia entre tareas con las opciones de 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 } } };
Cómo aplicar estilos a las pistas
El diseño de cuadrícula se controla mediante una combinación de innerGridHorizLine
, innerGridTrack
y innerGridDarkTrack
. Si configuras solo el innerGridTrack
, el gráfico calculará un color más oscuro para el innerGridDarkTrack
, pero si configuras únicamente el innerGridDarkTrack
, innerGridTrack
usará su color predeterminado y no calculará un color más claro.
var options = { height: 275, gantt: { criticalPathEnabled: false, innerGridHorizLine: { stroke: '#ffe0b2', strokeWidth: 2 }, innerGridTrack: {fill: '#fff3e0'}, innerGridDarkTrack: {fill: '#ffcc80'} } };
Cargando
El nombre del paquete google.charts.load
es "gantt"
.
google.charts.load("current", {packages: ["gantt"]});
El nombre de clase de la visualización es google.visualization.Gantt
.
var chart = new google.visualization.Gantt(container);
Formato de los datos
Filas: Cada fila de la tabla representa una tarea.
Columnas:
Columna 0 | Columna 1 | Columna 2 | Columna 3 | Columna 4 | Columna 5 | Columna 6 | Columna 7 | |
---|---|---|---|---|---|---|---|---|
Objetivo: | ID de la tarea | Nombre de la tarea | ID de recurso (opcional) | Iniciar | Finalizar | Duración (en milisegundos) | Porcentaje de avance | Dependencias |
Tipo de datos: | cadena | cadena | cadena | date | date | número | número | cadena |
Role: | dominio | datos | datos | datos | datos | datos | datos | datos |
Opciones de configuración
Nombre | Tipo | Predeterminado | Descripción |
---|---|---|---|
backgroundColor.fill | cadena | 'blanco' | El color de relleno del gráfico, como una cadena HTML de color. |
gantt.arrow | objeto | null |
En el caso de los diagramas de Gantt, gantt.arrow controla las distintas propiedades de las flechas que conectan tareas.
|
gantt.arrow.angle | número | 45 | El ángulo de la punta de la flecha. |
gantt.arrow.color | cadena | "#000" | El color de las flechas. |
gantt.arrow.length | número | 8 | La longitud de la punta de la flecha. |
gantt.arrow.radius | número | 15 | El radio para definir la curva de la flecha entre dos tareas. |
gantt.arrow.spaceAfter | número | 4 | La cantidad de espacio en blanco entre la punta de una flecha y la tarea a la que apunta. |
gantt.arrow.width | número | 1.4 | El ancho de las flechas. |
gantt.barCornerRadius | número | 2 | Radio para definir la curva de las esquinas de una barra. |
gantt.barHeight | número | null | La altura de las barras para tareas. |
gantt.criticalPathEnabled | boolean | verdadero |
Si es true , alguna flecha de la ruta crítica tendrá un estilo diferente.
|
gantt.criticalPathStyle | objeto | null | Un objeto que contiene el estilo de cualquier flecha de ruta crítica. |
gantt.criticalPathStyle.stroke | cadena | null | El color de las flechas de ruta crítica. |
gantt.criticalPathStyle.strokeWidth | número | 1.4 | Espesor de las flechas de la ruta crítica. |
gantt.defaultStartDate | fecha/número | null |
Si la fecha de inicio no se puede calcular a partir de los valores de DataTable, la fecha de inicio se establecerá como esta. Acepta un valor date (new Date(YYYY, M, D) ) o un número, que es la cantidad de milisegundos que se usarán.
|
gantt.innerGridHorizLine | objeto | null | Define el estilo de las líneas de cuadrícula horizontales internas. |
gantt.innerGridHorizLine.stroke | cadena | null | El color de las líneas de cuadrícula horizontales internas. |
gantt.innerGridHorizLine.strokeWidth | número | 1 | El ancho de las líneas de cuadrícula horizontales internas. |
gantt.innerGridTrack.fill | cadena | null |
El color de relleno del seguimiento de cuadrícula interno. Si no se especifica un innerGridDarkTrack.fill , este se aplicará a todos los seguimientos de cuadrícula.
|
gantt.innerGridDarkTrack.fill | cadena | null | El color de relleno del seguimiento de cuadrícula interno oscuro y alternativo. |
gantt.labelMaxWidth | número | 300 | La cantidad máxima de espacio permitido para cada etiqueta de tarea. |
gantt.labelStyle | objeto | null |
Un objeto que contiene los estilos de las etiquetas de tareas. labelStyle: { fontName: Roboto2, fontSize: 14, color: '#757575' }, |
gantt.percentEnabled | boolean | verdadero | Llena la barra de tareas en función del porcentaje completado de la tarea. |
gantt.percentStyle.fill | cadena | null | El color de la parte del porcentaje completado de una barra de tareas. |
gantt.shadowEnabled | boolean | verdadero |
Si se establece en true , dibuja una sombra debajo de cada barra de tareas que tiene dependencias.
|
gantt.shadowColor | cadena | "#000" | Define el color de las sombras debajo de cualquier barra de tareas que tenga dependencias. |
gantt.shadowOffset | número | 1 | Define el desplazamiento, en píxeles, de las sombras debajo de cualquier barra de tareas que tenga dependencias. |
gantt.sortTasks | boolean | verdadero | Especifica que las tareas deben ordenarse topológicamente, si es verdadero; de lo contrario, usa el mismo orden que las filas correspondientes de DataTable. |
gantt.trackHeight | número | null | La altura de las pistas. |
width | número | ancho del elemento contenedor | Es el ancho del gráfico (en píxeles). |
height | número | altura del elemento contenedor | altura del gráfico en píxeles. |
Métodos
Método | Descripción |
---|---|
draw(data, options) |
Dibuja el gráfico. El gráfico acepta más llamadas de método solo después de que se activa el evento Tipo de datos que se muestra: ninguno
|
getSelection() |
Muestra un array de las entidades del gráfico seleccionadas.
Las entidades seleccionables son barras, entradas de leyenda y categorías.
Para este gráfico, solo se puede seleccionar una entidad en un momento determinado.
Tipo de datos que se muestra: Es el array de elementos de selección.
|
setSelection() |
Selecciona las entidades del gráfico especificadas. Cancela cualquier selección anterior.
Las entidades seleccionables son barras, entradas de leyenda y categorías.
Para este gráfico, solo se puede seleccionar una entidad a la vez.
Tipo de datos que se muestra: ninguno
|
clearChart() |
Borra el gráfico y libera todos sus recursos asignados. Tipo de datos que se muestra: ninguno
|
Eventos
Evento | Descripción |
---|---|
click |
Se activa cuando el usuario hace clic en el gráfico. Se puede usar para identificar cuándo se hace clic en el título, los elementos de datos, las entradas de leyenda, los ejes, las líneas de cuadrícula o las etiquetas. Propiedades: targetID
|
error |
Se activa cuando se produce un error cuando se intenta renderizar el gráfico. Propiedades: ID, mensaje
|
ready |
El gráfico está listo para llamadas de método externas. Si deseas interactuar con el gráfico y llamar a los métodos después de dibujarlo, debes configurar un objeto de escucha para este evento antes de llamar al método Propiedades: ninguna
|
select |
Se activa cuando el usuario hace clic en una entidad visual. Para saber qué se seleccionó, llama a Propiedades: ninguna
|
Política de datos
Todo el código y los datos se procesan y renderizan en el navegador. No se envían datos a ningún servidor.