Apakah ada yang menggunakan R untuk membuat bagan Gantt ?
PS Saya bisa hidup tanpa panah ketergantungan.
Apakah ada yang menggunakan R untuk membuat bagan Gantt ?
PS Saya bisa hidup tanpa panah ketergantungan.
Jawaban:
Sekarang ada beberapa cara elegan untuk menghasilkan bagan Gantt di R.
Menggunakan 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)
Menggunakan 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
")
Temukan contoh ini dan banyak lagi di DiagrammeR
GitHub
Jika data Anda disimpan dalam a data.frame
, Anda dapat membuat string untuk diteruskan mermaid()
dengan mengonversinya ke format yang tepat.
Pertimbangkan hal berikut:
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
Menggunakan dplyr
dan tidyr
(atau sumber daya pertengkaran data favorit Anda):
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"
)
)
Seperti yang disebutkan oleh @GeorgeDontas di komentar, ada sedikit peretasan yang memungkinkan untuk mengubah label sumbu x menjadi tanggal daripada 'w.01, w.02'.
Dengan asumsi Anda menyimpan grafik putri duyung di atas m
, lakukan:
m$x$config = list(ganttConfig = list(
axisFormatter = list(list(
"%b %d, %Y"
,htmlwidgets::JS(
'function(d){ return d.getDay() == 1 }'
)
))
))
Pemberian yang mana:
Menggunakan timevis
Dari timevis
GitHub :
timevis
memungkinkan Anda membuat visualisasi garis waktu yang kaya dan sepenuhnya interaktif di R. Garis waktu dapat disertakan dalam aplikasi Shiny dan dokumen penurunan harga R, atau dilihat dari konsol R dan 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)
Pemberian yang mana:
Menggunakan secara plotly
Saya menemukan posting ini memberikan metode lain menggunakan plotly
. Berikut contohnya:
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
Pemberian yang mana:
Anda kemudian dapat menambahkan informasi dan anotasi tambahan, menyesuaikan font dan warna, dll. (Lihat entri blog untuk detailnya)
timevis
in R
terlihat keren dan sederhana. :-)
ggplot2
Bagan gantt sederhana .
Pertama, kami membuat beberapa data.
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"))
Sekarang gambar plotnya.
ggplot(mdfr, aes(value, name, colour = is.critical)) +
geom_line(size = 6) +
xlab(NULL) +
ylab(NULL)
Pertimbangkan untuk menggunakan paketprojmanr
(versi 0.1.0 dirilis di CRAN pada 23 Agustus 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
Sekarang mulai siapkan 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)
Paket plan
mendukung pembuatan bagan burndown dan diagram gantt dan berisi sebuah plot.gantt
fungsi. Lihat halaman Manual Grafis R ini
Lihat juga cara membuatnya di R menggunakan Plotly's R API GANTT CHARTS IN R MENGGUNAKAN SECARA PLOTLY .
Anda dapat melakukannya dengan paket 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)
Sumber: https://cran.r-project.org/web/packages/googleVis/vignettes/googleVis_examples.html
Saya menggunakan dan memodifikasi contoh di atas dari Richie, bekerja seperti pesona. Versi yang dimodifikasi untuk menunjukkan bagaimana modelnya dapat diterjemahkan ke dalam menyerap data CSV, bukan item teks yang diberikan secara manual.
CATATAN : Jawaban Richie tidak ada indikasi bahwa 2 paket ( bentuk ulang dan ggplot2 ) diperlukan agar kode di atas / di bawah berfungsi.
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()
Berikut adalah posting yang saya tulis tentang menggunakan ggplot untuk menghasilkan sesuatu seperti bagan Gantt. Tidak terlalu canggih, tetapi mungkin memberi Anda beberapa ide.
Bagi saya, Gvistimeline adalah alat terbaik untuk melakukan ini, tetapi koneksi online yang diperlukan tidak berguna bagi saya. Jadi saya membuat sebuah paket bernama vistime
that useplotly
(mirip dengan jawaban @Steven Beaupré), jadi Anda bisa memperbesar dll .:
https://github.com/shosaco/vistime
vistime
: Buat garis waktu interaktif atau bagan Gantt menggunakan plotly.js. Bagan dapat dimasukkan dalam aplikasi Shiny dan dimanipulasi melalui plotly_build ().
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")
Pertanyaan yang sangat lama, saya tahu, tetapi mungkin layak untuk ditinggalkan dari sini - tidak puas dengan jawaban yang saya temukan untuk pertanyaan ini - beberapa bulan yang lalu saya membuat paket dasar untuk membuat bagan Gantt berbasis ggplot2: ganttrify (detail lebih lanjut di readme paket) .
Library PlotPrjNetworks menyediakan Alat Jaringan yang berguna untuk Manajemen Proyek.
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)
Saya ingin meningkatkan ggplot-Answer dengan beberapa baris untuk setiap tugas.
Pertama buat beberapa data (dfrP adalah data.frame dari jawaban lain, dfrR adalah beberapa data.frame lain dengan tanggal realisasi dan mdfr adalah penggabungan yang sesuai dengan pernyataan ggplot () - berikut):
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)
Sekarang plot data ini menggunakan faset untuk nama tugas:
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)
Tanpa is.critical-information Anda juga dapat menggunakan Plan / Real sebagai warna (yang saya lebih suka), tetapi saya ingin menggunakan data.frame dari jawaban lain untuk membuatnya lebih sebanding.
Menemukan geom_segment di ggplot sangat bagus. Dari solusi sebelumnya menggunakan data tetapi tidak perlu meleleh.
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)
Anda dapat melihat posting ini. Ini menggunakan R dan ggplot.
https://dwh-businessintelligence.blogspot.nl/2016/05/what-if-for-project-management.html