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 categoria 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 basico en R con ggplot2 geom_segment

Color por fase

Diagrama de Gantt coloreado por fase en R con ggplot2

Anade color = fase en aes() para colorear cada tarea segun su fase de proyecto. Usa scale_color_manual() para asignar colores especificos 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 alfabetico. Usa reorder() para ordenarlas por fecha de inicio, de forma que la linea de tiempo se lea de arriba a abajo en orden cronologico.

# 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

Anade 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 linea de hoy

Usa scale_x_date() para controlar el formato de las etiquetas del eje y la frecuencia de las marcas. Anade 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 linea 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