varias superponer studio pie lineas graficos grafico graficas gantt chart r charts gantt-chart

superponer - Diagramas de Gantt con R



superponer graficas en r (12)

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

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 ")

Encuentre este ejemplo y muchos más en DiagrammeR GitHub

Si sus datos están almacenados en un data.frame , puede crear la cadena para pasar a mermaid() convirtiéndolo al formato apropiado.

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

Usando dplyr y tidyr (o cualquiera de tus recursos de disputa de datos favoritos):

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" ) )

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

Suponiendo que haya guardado el gráfico de sirena anterior en m , haga lo siguiente:

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 permite crear visualizaciones de línea de tiempo ricas y completamente interactivas en R. Los cronogramas se pueden incluir en las aplicaciones Shiny y los documentos de rebaja R, o se pueden ver desde la consola 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 post proporciona otro método usando plotly . Aquí hay 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], "<br>", "Duration: ", df$Duration[i], "days<br>", "Resource: ", df$Resource[i]), evaluate = T ) } p

Lo que da:

A continuación, puede agregar información adicional y anotaciones, personalizar fuentes y colores, etc. (ver la publicación de blog para más detalles)

¿Alguien ha usado R para crear un diagrama de Gantt ? La única solución de la que soy consciente es this , pero estoy buscando algo más sofisticado, si es posible (mirando más o menos así o this ).

PD: podría vivir sin las flechas de dependencia.


Considere utilizar el paquete projmanr (versión 0.1.0 lanzada 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 comienza 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)


El plan paquete es compatible con la creación de gráficos burndown y diagramas de Gantt y contiene una función plot.gantt . Vea esta página del Manual Gráfico R

Vea también cómo hacer uno en R usando la R API de post .


Library PlotPrjNetworks proporciona útiles herramientas de red para Project Management.

library(PlotPrjNetworks) project1=data.frame( task=c("Market Research","Concept Development","Viability Test", "Preliminary Design","Process Design","Prototyping","Market Testing","Final Design", "Launching"), start=c("2015-07-05","2015-07-05","2015-08-05","2015-10-05","2015-10-05","2016-02-18", "2016-03-18","2016-05-18","2016-07-18"), end=c("2015-08-05","2015-08-05","2015-10-05","2016-01-05","2016-02-18","2016-03-18", "2016-05-18","2016-07-18","2016-09-18")) project2=data.frame( from=c(1,2,3,4,5,6,7,8), to=c(2,3,4,5,6,7,8,9), type=c("SS","FS","FS","SS","FS","FS","FS","FS"), delay=c(7,7,7,8,10,10,10,10)) GanttChart(project1,project2)


Me gustaría mejorar la ggplot-Answer con varias barras para cada tarea.

Primero genere algunos datos (dfrP es el marco de datos de la otra respuesta, dfrR es otro data.frame con fechas de realización y mdfr es una fusión que se ajusta al siguiente ggplot () - statement):

library(reshape2) tasks <- c("Review literature", "Mung data", "Stats analysis", "Write Report") dfrP <- 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) ) dfrR <- data.frame( name = factor(tasks, levels = tasks), start.date = as.Date(c("2010-08-22", "2010-10-10", "2010-11-01", NA)), end.date = as.Date(c("2010-11-03", "2010-12-22", "2011-02-24", NA)), is.critical = c(TRUE, FALSE, FALSE,TRUE) ) mdfr <- merge(data.frame(type="Plan", melt(dfrP, measure.vars = c("start.date", "end.date"))), data.frame(type="Real", melt(dfrR, measure.vars = c("start.date", "end.date"))), all=T)

Ahora trace estos datos usando facetas para el nombre de la tarea:

library(ggplot2) ggplot(mdfr, aes(x=value, y=type, color=is.critical))+ geom_line(size=6)+ facet_grid(name ~ .) + scale_y_discrete(limits=c("Real", "Plan")) + xlab(NULL) + ylab(NULL)

Sin la información crítica, también podría usar Plan / Real como color (que yo preferiría), pero quería usar el marco de datos de la otra respuesta para que sea más comparable.


Para mí, Gvistimeline fue la mejor herramienta para hacer esto, pero su conexión en línea requerida no fue útil para mí. Por lo tanto, creé un paquete vistime que usa plotly (similar a la respuesta de @Steven Beaupré), por lo que puedes hacer zoom, etc.

https://github.com/shosaco/vistime

vistime : vistime líneas de tiempo interactivas o diagramas de Gantt usando plotly.js. Los gráficos se pueden incluir en aplicaciones brillantes y manipularse a través de plotly_build ().

install.packages("vistime") dat <- data.frame(Position=c(rep("President", 3), rep("Vice", 3)), Name = c("Washington", "Adams", "Jefferson", "Adams", "Jefferson", "Burr"), start = rep(c("1789-03-29", "1797-02-03", "1801-02-03"), 2), end = rep(c("1797-02-03", "1801-02-03", "1809-02-03"), 2), color = c(''#cbb69d'', ''#603913'', ''#c69c6e''), fontcolor = rep("white", 3)) vistime(dat, events="Position", groups="Name", title="Presidents of the USA")


Prueba esto:

install.packages("plotrix") library(plotrix) ?gantt.chart



Puedes hacerlo con el paquete de GoogleVis :

datTL <- data.frame(Position=c(rep("President", 3), rep("Vice", 3)), Name=c("Washington", "Adams", "Jefferson", "Adams", "Jefferson", "Burr"), start=as.Date(x=rep(c("1789-03-29", "1797-02-03", "1801-02-03"),2)), end=as.Date(x=rep(c("1797-02-03", "1801-02-03", "1809-02-03"),2))) Timeline <- gvisTimeline(data=datTL, rowlabel="Name", barlabel="Position", start="start", end="end", options=list(timeline="{groupByRowLabel:false}", backgroundColor=''#ffd'', height=350, colors="[''#cbb69d'', ''#603913'', ''#c69c6e'']")) plot(Timeline)

Fuente: https://cran.r-project.org/web/packages/googleVis/vignettes/googleVis_examples.html


Un simple ggplot2 gantt ggplot2.

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)


Usé y modifiqué el ejemplo anterior de Richie, funcionó como un amuleto. Versión modificada para mostrar cómo su modelo podría traducirse en la ingesta de datos CSV en lugar de elementos de texto proporcionados manualmente.

NOTA : Faltaba la respuesta de Richie indicando que se necesitan 2 paquetes ( remodelación y ggplot2 ) para que el código anterior / siguiente funcione.

rawschedule <- read.csv("sample.csv", header = TRUE) #modify the "sample.csv" to be the name of your file target. - Make sure you have headers of: Task, Start, Finish, Critical OR modify the below to reflect column count. tasks <- c(t(rawschedule["Task"])) dfr <- data.frame( name = factor(tasks, levels = tasks), start.date = c(rawschedule["Start"]), end.date = c(rawschedule["Finish"]), is.critical = c(rawschedule["Critical"])) mdfr <- melt(dfr, measure.vars = c("Start", "Finish")) #generates the plot ggplot(mdfr, aes(as.Date(value, "%m/%d/%Y"), name, colour = Critical)) + geom_line(size = 6) + xlab("Duration") + ylab("Tasks") + theme_bw()


Aquí hay una publicación que escribí sobre el uso de ggplot para generar algo así como un diagrama de Gantt. No es muy sofisticado, pero podría darte algunas ideas.