Hat jemand R verwendet, um ein Gantt-Diagramm zu erstellen ?
PS Ich könnte ohne die Abhängigkeitspfeile leben.
Hat jemand R verwendet, um ein Gantt-Diagramm zu erstellen ?
PS Ich könnte ohne die Abhängigkeitspfeile leben.
Antworten:
Es gibt jetzt einige elegante Möglichkeiten, ein Gantt-Diagramm in R zu erstellen.
Candela benutzen
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)
Verwenden von 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
")
Finden Sie dieses und viele weitere Beispiele auf DiagrammeR
GitHub
Wenn Ihre Daten in a gespeichert sind data.frame
, können Sie die zu übergebende Zeichenfolge erstellen, mermaid()
indem Sie sie in das richtige Format konvertieren.
Folgendes berücksichtigen:
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
Verwenden von dplyr
und tidyr
(oder einer Ihrer bevorzugten Datenquellen):
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"
)
)
Wie von @GeorgeDontas in den Kommentaren erwähnt, gibt es einen kleinen Hack , der es ermöglichen könnte, die Beschriftungen der x-Achse in Datumsangaben anstelle von 'w.01, w.02' zu ändern.
Angenommen, Sie haben das obige Meerjungfrauen-Diagramm in gespeichert m
, gehen Sie wie folgt vor :
m$x$config = list(ganttConfig = list(
axisFormatter = list(list(
"%b %d, %Y"
,htmlwidgets::JS(
'function(d){ return d.getDay() == 1 }'
)
))
))
Welches gibt:
Timevis verwenden
Vom timevis
GitHub :
timevis
Mit dieser Option können Sie umfangreiche und vollständig interaktive Timeline-Visualisierungen in R erstellen . Timelines können in Shiny-Apps und R-Markdown-Dokumenten enthalten sein oder über die R-Konsole und den RStudio Viewer angezeigt werden.
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)
Welches gibt:
Plotly verwenden
Ich bin auf diesen Beitrag gestoßen, der eine andere Methode zur Verfügung stellt plotly
. Hier ist ein Beispiel:
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
Welches gibt:
Sie können dann zusätzliche Informationen und Anmerkungen hinzufügen, Schriftarten und Farben anpassen usw. (Details siehe Blog-Beitrag)
timevis
in R
sieht cool und einfach aus. :-)
Ein einfaches ggplot2
Gantt-Diagramm.
Zuerst erstellen wir einige Daten.
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"))
Zeichnen Sie nun die Handlung.
ggplot(mdfr, aes(value, name, colour = is.critical)) +
geom_line(size = 6) +
xlab(NULL) +
ylab(NULL)
Erwägen Sie die Verwendung des Paketsprojmanr
(Version 0.1.0, veröffentlicht am 23. August 2017 auf CRAN).
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
Beginnen Sie nun mit der Vorbereitung von 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)
Das Paket plan
unterstützt die Erstellung von Burndown-Diagrammen und Gantt-Diagrammen und enthält eine plot.gantt
Funktion. Siehe diese Seite mit dem R-Grafikhandbuch
Siehe auch, wie Sie mit Plotlys R-API eine G in R erstellen . GANTT CHARTS IN R VERWENDEN VON PLOTLY .
Sie können dies mit dem GoogleVis-Paket tun :
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)
Quelle: https://cran.r-project.org/web/packages/googleVis/vignettes/googleVis_examples.html
Ich habe das obige Beispiel von Richie verwendet und modifiziert, es hat wie ein Zauber funktioniert. Geänderte Version, um zu zeigen, wie sein Modell in die Aufnahme von CSV-Daten anstatt in manuell bereitgestellte Textelemente übersetzt werden kann.
HINWEIS : Richie Antwort fehlte Hinweis darauf , dass zwei Pakete ( reshape und ggplot2 ) für die oben / unten Code zur Arbeit benötigt werden.
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()
Hier ist ein Beitrag , den ich über die Verwendung von ggplot geschrieben habe, um so etwas wie ein Gantt-Diagramm zu generieren. Nicht sehr raffiniert, könnte Ihnen aber einige Ideen geben.
Für mich war Gvistimeline das beste Tool, um dies zu tun, aber die erforderliche Online-Verbindung war für mich nicht nützlich. Daher habe ich ein Paket namens verwendet vistime
, das verwendet plotly
(ähnlich der Antwort von @Steven Beaupré), damit Sie zoomen können usw.:
https://github.com/shosaco/vistime
vistime
: Erstellen Sie mit plotly.js interaktive Zeitleisten oder Gantt-Diagramme. Die Diagramme können in Shiny-Apps enthalten und über plotly_build () bearbeitet werden.
install.packages("vistime")
library("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")
Sehr alte Frage, ich weiß, aber vielleicht lohnt es sich, hier zu bleiben, dass ich - unzufrieden mit den Antworten, die ich auf diese Frage gefunden habe - vor einigen Monaten ein Basispaket für die Erstellung von ggplot2-basierten Gantt-Diagrammen erstellt habe: ganttrify (weitere Details in der Readme- Datei des Pakets) .
Die Bibliothek PlotPrjNetworks bietet nützliche Netzwerkwerkzeuge für das Projektmanagement.
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)
Ich möchte die ggplot-Antwort mit mehreren Balken für jede Aufgabe verbessern.
Generieren Sie zuerst einige Daten (dfrP ist der data.frame der anderen Antwort, dfrR ist ein anderer data.frame mit Realisierungsdaten und mdfr ist eine Zusammenführungsanpassung an die folgende ggplot () - Anweisung):
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)
Zeichnen Sie nun diese Daten mit Facetten für den Aufgabennamen:
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)
Ohne die is.critical-Information könnten Sie auch Plan / Real als Farbe verwenden (was ich bevorzugen würde), aber ich wollte den data.frame der anderen Antwort verwenden, um die Vergleichbarkeit zu verbessern.
Fand das geom_segment in ggplot ist großartig. Aus den vorherigen Lösungen verwenden Sie die Daten, müssen aber nicht schmelzen.
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)
)
ggplot(dfr, aes(x =start.date, xend= end.date, y=name, yend = name, color=is.critical)) +
geom_segment(size = 6) +
xlab(NULL) + ylab(NULL)
Sie können sich diesen Beitrag ansehen. Dies verwendet R und ggplot.
https://dwh-businessintelligence.blogspot.nl/2016/05/what-if-for-project-management.html