Saltar al contenido

Diagramas de Gantt con R

Al fin luego de mucho trabajar hemos dado con la respuesta de esta contrariedad que ciertos los usuarios de este sitio web presentan. Si deseas compartir algo no dejes de dejar tu conocimiento.

Solución:

Ahora hay algunas formas elegantes de generar un diagrama de Gantt en R.

Usando Candela

library(candela)

data <- list(
    list(name='Do this', level=1, start=0, end=5),
    list(name='This part 1', level=2, start=0, end=3),
    list(name='This part 2', level=2, start=3, end=5),
    list(name='Then that', level=1, start=5, end=15),
    list(name='That part 1', level=2, start=5, end=10),
    list(name='That part 2', level=2, start=10, end=15))

candela('GanttChart',
    data=data, label='name',
    start='start', end='end', level='level',
    width=700, height=200)

ingrese la descripción de la imagen aquí

Usando DiagrammeR

library(DiagrammeR)

mermaid("
gantt
dateFormat  YYYY-MM-DD
title A Very Nice Gantt Diagram

section Basic Tasks
This is completed             :done,          first_1,    2014-01-06, 2014-01-08
This is active                :active,        first_2,    2014-01-09, 3d
Do this later                 :               first_3,    after first_2, 5d
Do this after that            :               first_4,    after first_3, 5d

section Important Things
Completed, critical task      :crit, done,    import_1,   2014-01-06,24h
Also done, also critical      :crit, done,    import_2,   after import_1, 2d
Doing this important task now :crit, active,  import_3,   after import_2, 3d
Next critical task            :crit,          import_4,   after import_3, 5d

section The Extras
First extras                  :active,        extras_1,   after import_4,  3d
Second helping                :               extras_2,   after extras_1, 20h
More of the extras            :               extras_3,   after extras_1, 48h
")

ingrese la descripción de la imagen aquí

Encuentra este ejemplo y muchos más en DiagrammeR GitHub


Si sus datos se almacenan en un data.frame, puedes crear el string pasar a mermaid() convirtiéndolo al formato adecuado.

Considera lo siguiente:

df <- data.frame(task = c("task1", "task2", "task3"),
                 status = c("done", "active", "crit"),
                 pos = c("first_1", "first_2", "first_3"),
                 start = c("2014-01-06", "2014-01-09", "after first_2"),
                 end = c("2014-01-08", "3d", "5d"))

#   task status     pos         start        end
#1 task1   done first_1    2014-01-06 2014-01-08
#2 task2 active first_2    2014-01-09         3d
#3 task3   crit first_3 after first_2         5d

Utilizando dplyr y tidyr (o cualquiera de sus recursos favoritos de lucha de datos):

library(tidyr)
library(dplyr)

mermaid(
  paste0(
    # mermaid "header", each component separated with "n" (line break)
    "gantt", "n", 
    "dateFormat  YYYY-MM-DD", "n", 
    "title A Very Nice Gantt Diagram", "n",
    # unite the first two columns (task & status) and separate them with ":"
    # then, unite the other columns and separate them with ","
    # this will create the required mermaid "body"
    paste(df %>%
            unite(i, task, status, sep = ":") %>%
            unite(j, i, pos, start, end, sep = ",") %>%
            .$j, 
          collapse = "n"
    ), "n"
  )
)

Según lo mencionado por @GeorgeDontas en los comentarios, hay un pequeño truco que podría permitir cambiar las etiquetas del eje x a fechas en lugar de 'w.01, w.02'.

Suponiendo que guardó el gráfico de sirena anterior en m, hacer:

m$x$config = list(ganttConfig = list(
  axisFormatter = list(list(
    "%b %d, %Y" 
    ,htmlwidgets::JS(
      'function(d) return d.getDay() == 1 ' 
    )
  ))
))

Lo que da:

ingrese la descripción de la imagen aquí


Usando timevis

Desde el timevis GitHub:

timevis te permite crear ricos y totalmente interactivo Las visualizaciones de la línea de tiempo en R. Las líneas de tiempo se pueden incluir en las aplicaciones Shiny y los documentos de rebajas de R, o se pueden ver desde la consola de R y RStudio Viewer.

library(timevis)

data <- data.frame(
  id      = 1:4,
  content = c("Item one"  , "Item two"  ,"Ranged item", "Item four"),
  start   = c("2016-01-10", "2016-01-11", "2016-01-20", "2016-02-14 15:00:00"),
  end     = c(NA          ,           NA, "2016-02-04", NA)
)

timevis(data)

Lo que da:

ingrese la descripción de la imagen aquí


Usando plotly

Me encontré con esta publicación que proporciona otro método usando plotly. He aquí un ejemplo:

library(plotly)

df <- read.csv("https://cdn.rawgit.com/plotly/datasets/master/GanttChart-updated.csv", 
               stringsAsFactors = F)

df$Start  <- as.Date(df$Start, format = "%m/%d/%Y")
client    <- "Sample Client"
cols      <- RColorBrewer::brewer.pal(length(unique(df$Resource)), name = "Set3")
df$color  <- factor(df$Resource, labels = cols)

p <- plot_ly()
for(i in 1:(nrow(df) - 1))
  p <- add_trace(p,
                 x = c(df$Start[i], df$Start[i] + df$Duration[i]), 
                 y = c(i, i), 
                 mode = "lines",
                 line = list(color = df$color[i], width = 20),
                 showlegend = F,
                 hoverinfo = "text",
                 text = paste("Task: ", df$Task[i], "
", "Duration: ", df$Duration[i], "days
", "Resource: ", df$Resource[i]), evaluate = T ) p

Lo que da:

ingrese la descripción de la imagen aquí

Luego, puede agregar información adicional y anotaciones, personalizar fuentes y colores, etc. (consulte la publicación del blog para obtener más detalles)

Un simple ggplot2 Gráfico de gantt.

Primero, creamos algunos datos.

library(reshape2)
library(ggplot2)

tasks <- c("Review literature", "Mung data", "Stats analysis", "Write Report")
dfr <- data.frame(
  name        = factor(tasks, levels = tasks),
  start.date  = as.Date(c("2010-08-24", "2010-10-01", "2010-11-01", "2011-02-14")),
  end.date    = as.Date(c("2010-10-31", "2010-12-14", "2011-02-28", "2011-04-30")),
  is.critical = c(TRUE, FALSE, FALSE, TRUE)
)
mdfr <- melt(dfr, measure.vars = c("start.date", "end.date"))

Ahora dibuja la trama.

ggplot(mdfr, aes(value, name, colour = is.critical)) + 
  geom_line(size = 6) +
  xlab(NULL) + 
  ylab(NULL)

Considere usar el paquete projmanr (versión 0.1.0 publicada en CRAN el 23 de agosto de 2017).

library(projmanr)

# Use raw example data
(data <- taskdata1)

taskdata1:

  id name duration pred
1  1   T1        3     
2  2   T2        4    1
3  3   T3        2    1
4  4   T4        5    2
5  5   T5        1    3
6  6   T6        2    3
7  7   T7        4 4,5 
8  8   T8        3  6,7

Ahora comience a preparar gantt:

# Create a gantt chart using the raw data
gantt(data)

ingrese la descripción de la imagen aquí

# Create a second gantt chart using the processed data
res <- critical_path(data)
gantt(res)

ingrese la descripción de la imagen aquí

# Use raw example data
data <- taskdata1
# Create a network diagram chart using the raw data
network_diagram(data)

ingrese la descripción de la imagen aquí

# Create a second network diagram using the processed data
res <- critical_path(data)
network_diagram(res)

ingrese la descripción de la imagen aquí

Acuérdate de que puedes añadir una evaluación si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *