Diagrammes de Gantt avec R

Quelqu’un a-t-il utilisé R pour créer un diagramme de Gantt ? La seule solution que je connaisse est celle-ci , mais je recherche quelque chose de plus sophistiqué, si possible (en regardant plus ou moins comme ceci ou cela ).

PS je pourrais vivre sans les flèches de dépendance.

Il existe maintenant quelques méthodes élégantes pour générer un diagramme de Gantt dans R.

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

entrer la description de l'image ici

Trouvez cet exemple et beaucoup d’autres sur DiagrammeR GitHub


Si vos données sont stockées dans un data.frame , vous pouvez créer la chaîne à transmettre à mermaid() en la convertissant au format approprié.

Considérer ce qui suit:

 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 

En utilisant dplyr et tidyr (ou l'une de vos ressources de recherche de données préférées):

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

Comme mentionné par @GeorgeDontas dans les commentaires, il y a un petit hack qui pourrait permettre de changer les étiquettes de l'axe x en dates au lieu de 'w.01, w.02'.

En supposant que vous avez enregistré le graphique de sirène ci-dessus en m , faites:

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

Qui donne:

entrer la description de l'image ici


Utiliser timevis

Du timevis GitHub :

timevis vous permet de créer des visualisations de chronologie riches et entièrement interactives dans R. Timelines peuvent être incluses dans les applications Shiny et les documents R markdown, ou visualisées à partir de la console R et de 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) 

Qui donne:

entrer la description de l'image ici


En utilisant plotly

Je suis tombé sur ce post en fournissant une autre méthode utilisant l' plotly . Voici un exemple:

 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

Qui donne:

entrer la description de l'image ici

Vous pouvez ensuite append des informations et des annotations supplémentaires, personnaliser les fonts et les couleurs, etc. (voir l'article sur le blog pour plus de détails).

Un simple ggplot2 gantt ggplot2.

Tout d’abord, nous créons des données.

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

Maintenant, dessinez l'insortinggue.

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

Essaye ça:

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

Le plan package prend en charge la création de graphiques de gravure et de diagrammes de Gantt et contient une fonction plot.gantt . Voir cette page du manuel graphique R

Voyez également comment en créer un en R en utilisant les CARTES R API GANTT de Plotly EN UTILISANT TRÈS RAPIDEMENT .

Envisagez d’utiliser le package projmanr (version 0.1.0 publiée sur CRAN le 23 août 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 

Maintenant, commencez à préparer gantt:

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

entrer la description de l'image ici

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

entrer la description de l'image ici

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

entrer la description de l'image ici

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

entrer la description de l'image ici

Vous pouvez le faire avec le package 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) 

entrer la description de l'image ici

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

Voici un article que j’ai écrit en utilisant ggplot pour générer quelque chose comme un diagramme de Gantt. Pas très sophistiqué, mais pourrait vous donner quelques idées.

J’ai utilisé et modifié l’exemple ci-dessus de Richie, travaillé comme un charme. Version modifiée pour montrer comment son modèle peut se traduire par l’ingestion de données CSV plutôt que par des éléments de texte fournis manuellement.

REMARQUE : la réponse de Richie manquait d’indication que 2 paquets ( reshape et ggplot2 ) sont nécessaires pour que le code ci-dessus / ci-dessous fonctionne.

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

Bibliothèque PlotPrjNetworks fournit des outils de mise en réseau utiles pour la gestion de projet.

 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) 

entrer la description de l'image ici

Je voudrais améliorer le ggplot-Answer avec plusieurs barres pour chaque tâche.

D’abord générer des données (dfrP est le data.frame de l’autre réponse, dfrR est un autre data.frame avec des dates de réalisation et mdfr est un ajustement de fusion à l’instruction ggplot () suivante):

 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) 

Maintenant, tracez ces données en utilisant des facettes pour le nom de la tâche:

 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) 

Sans l'information is.critical, vous pouvez également utiliser Plan / Real comme couleur (ce que je préfèrerais), mais je voulais utiliser le data.frame de l'autre réponse pour le rendre plus comparable.

Vous pouvez jeter un oeil à ce post. Cela utilise R et ggplot.

https://dwh-businessintelligence.blogspot.nl/2016/05/what-if-for-project-management.html

Diagramme de Gantt r et ggplot

Pour moi, Gvistimeline était le meilleur outil pour y parvenir, mais sa connexion en ligne requirejse ne m’était pas utile. J’ai donc créé un package calles vistime qui utilise plotly (similaire à la réponse de @Steven Beaupré), de sorte que vous pouvez zoomer, etc .:

https://github.com/shosaco/vistime

vistime : Créez des timelines interactifs ou des diagrammes de Gantt en utilisant plotly.js. Les graphiques peuvent être inclus dans les applications Shiny et manipulés via 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") 

entrer la description de l'image ici