Gantt-diagrammen met R

Heeft iemand R gebruikt om een ​​Gantt-diagramte maken?
Ik ben op zoek naar iets geavanceerds, indien mogelijk (lijkt min of meer op dit).

P.S. Ik zou kunnen leven zonder de afhankelijkheidspijlen.


Antwoord 1, autoriteit 100%

Er zijn nu een paar elegante manieren om een ​​Gantt-diagram in R te genereren.

Candela gebruiken

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)

voer hier de afbeeldingsbeschrijving in

DiagrammeR gebruiken

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

voer hier de afbeeldingsbeschrijving in

Vind dit voorbeeld en nog veel meer op DiagrammeRGitHub


Als uw gegevens zijn opgeslagen in een data.frame, kunt u de tekenreeks maken om door te geven aan mermaid()door deze naar het juiste formaat te converteren.

Denk aan het volgende:

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

Met behulp van dplyren tidyr(of een van uw favoriete bronnen voor gegevensruzie):

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

Zoals vermeld door @GeorgeDontas in de opmerkingen, is er een kleine hackdat zou het mogelijk kunnen maken om de labels van de x-as te veranderen in datums in plaats van ‘w.01, w.02’.

Ervan uitgaande dat je de bovenstaande zeemeermingrafiek hebt opgeslagen in m, doe dan:

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

Wat geeft:

voer hier de afbeeldingsbeschrijving in


Timevis gebruiken

Van de timevisGitHub:

Met

timeviskun je een rijke en volledig interactievetijdlijn maken
visualisaties in R. Tijdlijnen kunnen worden opgenomen in Shiny-apps en R
afprijsdocumenten, of bekeken vanuit de R-console en 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)

Wat geeft:

voer hier de afbeeldingsbeschrijving in


Plots gebruiken

Ik stuitte op deze postdie een andere methode biedt met plotly. Hier is een voorbeeld:

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

Wat geeft:

voer hier de afbeeldingsbeschrijving in

Je kunt dan aanvullende informatie en annotaties toevoegen, lettertypen en kleuren aanpassen, enz. (zie blogbericht voor details)


Antwoord 2, autoriteit 24%

Een eenvoudig ggplot2Gantt-diagram.

Eerst maken we wat gegevens.

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

Teken nu de plot.

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

Antwoord 3, autoriteit 14%

Heel oude vraag, ik weet het, maar misschien de moeite waard om hier te laten dat – niet tevreden met de antwoorden die ik op deze vraag vond – ik een paar maanden geleden een basispakket heb gemaakt voor het maken van op ggplot2 gebaseerde Gantt-diagrammen: ganttrify(meer details in de readme van het pakket).

Voorbeeld uitvoer:
voer hier de afbeeldingsbeschrijving in


Antwoord 4, autoriteit 11%

Overweeg om het pakket projmanr(versie 0.1 .0 uitgebracht op CRAN op 23 augustus 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

Begin nu gantt voor te bereiden:

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

voer hier de afbeeldingsbeschrijving in

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

voer hier de afbeeldingsbeschrijving in

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

voer hier de afbeeldingsbeschrijving in

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

voer hier de afbeeldingsbeschrijving in


Antwoord 5, autoriteit 6%

Probeer dit:

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

Antwoord 6, autoriteit 6%

Pakket planondersteunt het maken van burndown-diagrammen en gantt
diagrammen en bevat een functie plot.gantt. Zie deze R grafische handleiding pagina

Bekijk ook hoe je er een kunt maken in R met de R API van Plotly GANTT GRAFIEKEN IN R MET PLOTLY.


Antwoord 7, autoriteit 4%

U kunt het doen met het GoogleVis-pakket:

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)

 Voer hier de afbeeldingsbeschrijving in

Bron: https: //cran.r-project. Org / Web / Pakketten / Googlevis / Vignetten / Googlevis_Examples.html


8, Autoriteit 2%

Bibliotheek plotprjnetworks biedt handige netwerkhulpmiddelen voor projectbeheer .

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)

voer hier de afbeeldingsbeschrijving in


Antwoord 9, autoriteit 2%

Ik zou graag het ggplot-Answer willen verbeteren met verschillende balken voor elke taak.

Genereer eerst wat gegevens (dfrP is het data.frame van het andere antwoord, dfrR is een ander data.frame met realisatiedatums en mdfr is een samenvoeging die past bij het volgende 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)

Plot deze gegevens nu met behulp van facetten voor de taaknaam:

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)

Zonder de is.critical-information zou je ook Plan/Real als kleur kunnen gebruiken (wat ik liever zou hebben), maar ik wilde het data.frame van het andere antwoord gebruiken om het beter vergelijkbaar te maken.


Antwoord 10

Je zou dit bericht eens kunnen bekijken. Dit gebruikt R en ggplot.

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

r en ggplot Gantt-diagram

Other episodes