Datos de muestra

Un diagrama de Gantt necesita un data frame con al menos tres columnas: el nombre de la tarea, la fecha de inicio y la fecha de fin. Una columna de fase o categoría opcional permite colorear las tareas por grupo.

tasks <- data.frame(
  tarea  = c("Requisitos", "Diseno UI", "Backend", "Frontend",
             "Integracion", "Pruebas", "Correcciones", "Despliegue"),
  inicio = as.Date(c("2024-01-08", "2024-01-15", "2024-01-22", "2024-02-05",
                     "2024-03-04", "2024-03-11", "2024-03-25", "2024-04-08")),
  fin    = as.Date(c("2024-01-19", "2024-02-02", "2024-03-01", "2024-03-08",
                     "2024-03-22", "2024-04-05", "2024-04-05", "2024-04-12")),
  fase   = c("Planificacion", "Diseno", "Desarrollo", "Desarrollo",
             "Desarrollo", "QA", "QA", "Lanzamiento")
)

geom_segment()

Mapea inicio a x, fin a xend y tarea a y e yend. geom_segment() dibuja una barra horizontal por cada fila. Aumenta linewidth para que las barras sean lo suficientemente altas para leerlas.

# install.packages("ggplot2")
library(ggplot2)

ggplot(tasks, aes(x = inicio, xend = fin,
                  y = tarea,  yend = tarea)) +
  geom_segment(linewidth = 8) +
  labs(x = NULL, y = NULL) +
  theme_minimal()

Diagrama de Gantt básico en R con ggplot2 geom_segment

Color por fase

Diagrama de Gantt coloreado por fase en R con ggplot2

Añade color = fase en aes() para colorear cada tarea según su fase de proyecto. Usa scale_color_manual() para asignar colores específicos a cada nombre de fase.

# install.packages("ggplot2")
library(ggplot2)

ggplot(tasks, aes(x = inicio, xend = fin,
                  y = tarea,  yend = tarea,
                  color = fase)) +
  geom_segment(linewidth = 8) +
  labs(x = NULL, y = NULL, color = "Fase") +
  theme_minimal()

Orden de las tareas

Por defecto las tareas aparecen en orden alfabético. Usa reorder() para ordenarlas por fecha de inicio, de forma que la línea de tiempo se lea de arriba a abajo en orden cronológico.

# install.packages("ggplot2")
library(ggplot2)

tasks$tarea <- reorder(tasks$tarea,
                       tasks$inicio)

ggplot(tasks, aes(x = inicio, xend = fin,
                  y = tarea,  yend = tarea,
                  color = fase)) +
  geom_segment(linewidth = 8) +
  theme_minimal()

Diagrama de Gantt con tareas ordenadas por fecha de inicio en ggplot2

Etiquetas de tarea

Diagrama de Gantt con etiquetas de tarea en ggplot2

Añade geom_text() para imprimir el nombre de la tarea al inicio de cada barra. Usa hjust = -0.1 para desplazar la etiqueta ligeramente hacia la derecha y oculta las etiquetas del eje Y con axis.text.y = element_blank() para evitar duplicados.

# install.packages("ggplot2")
library(ggplot2)

ggplot(tasks, aes(x = inicio, xend = fin,
                  y = tarea,  yend = tarea,
                  color = fase)) +
  geom_segment(linewidth = 8, alpha = 0.7) +
  geom_text(aes(label = tarea, x = inicio),
            hjust = -0.1,
            color = "black",
            size  = 3) +
  theme_minimal() +
  theme(axis.text.y = element_blank())

Formato de fechas y línea de hoy

Usa scale_x_date() para controlar el formato de las etiquetas del eje y la frecuencia de las marcas. Añade un geom_vline() en cualquier fecha para marcar un hito o la fecha actual.

# install.packages("ggplot2")
library(ggplot2)

ggplot(tasks, aes(x = inicio, xend = fin,
                  y = tarea,  yend = tarea,
                  color = fase)) +
  geom_segment(linewidth = 8, alpha = 0.85) +
  geom_vline(xintercept = as.Date("2024-03-01"),
             linetype = "dashed", color = "grey40") +
  scale_x_date(date_labels = "%b %Y",
               date_breaks = "1 month") +
  labs(x = NULL, y = NULL, color = "Fase") +
  theme_minimal()

Diagrama de Gantt con formato de fechas y línea de hoy en ggplot2

MASTER - STATISTICS DOT COM

Master Statistics

Aprende estadística desde lo básico hasta técnicas avanzadas, explicado con claridad

Ir al sitio
R PACKAGES IO

R Packages

Explora y descubre miles de paquetes, funciones y datasets de R

Ir al sitio

También te puede interesar