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)
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
")
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:
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:
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:
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)
# Create a second gantt chart using the processed data
res <- critical_path(data)
gantt(res)
# Use raw example data
data <- taskdata1
# Create a network diagram chart using the raw data
network_diagram(data)
# Create a second network diagram using the processed data
res <- critical_path(data)
network_diagram(res)
Acuérdate de que puedes añadir una evaluación si te fue de ayuda.