Có ai sử dụng R để tạo biểu đồ Gantt không?
Tái bút Tôi có thể sống mà không cần đến những mũi tên phụ thuộc.
Có ai sử dụng R để tạo biểu đồ Gantt không?
Tái bút Tôi có thể sống mà không cần đến những mũi tên phụ thuộc.
Câu trả lời:
Hiện tại có một số cách đơn giản để tạo biểu đồ Gantt trong R.
Sử dụng 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)
Sử dụng 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
")
Tìm ví dụ này và nhiều ví dụ khác trên DiagrammeR
GitHub
Nếu dữ liệu của bạn được lưu trữ trong a data.frame
, bạn có thể tạo chuỗi để chuyển đến mermaid()
bằng cách chuyển đổi nó sang định dạng thích hợp.
Hãy xem xét những điều sau:
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
Sử dụng dplyr
và tidyr
(hoặc bất kỳ nguồn ressling dữ liệu yêu thích nào của bạn):
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"
)
)
Như đã được @GeorgeDontas đề cập trong các nhận xét, có một thủ thuật nhỏ có thể cho phép thay đổi các nhãn của trục x thành ngày tháng thay vì 'w.01, w.02'.
Giả sử bạn đã lưu biểu đồ nàng tiên cá ở trên vào m
, hãy thực hiện:
m$x$config = list(ganttConfig = list(
axisFormatter = list(list(
"%b %d, %Y"
,htmlwidgets::JS(
'function(d){ return d.getDay() == 1 }'
)
))
))
Cái nào mang lại:
Sử dụng timevis
Từ timevis
GitHub :
timevis
cho phép bạn tạo hình ảnh trực quan về dòng thời gian phong phú và tương tác đầy đủ trong R. Dòng thời gian có thể được đưa vào ứng dụng Shiny và tài liệu đánh dấu R hoặc xem từ bảng điều khiển R và Trình xem RStudio.
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)
Cái nào mang lại:
Sử dụng âm mưu
Tôi tình cờ thấy bài đăng này cung cấp một phương pháp khác bằng cách sử dụng plotly
. Đây là một ví dụ:
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
Cái nào mang lại:
Sau đó, bạn có thể thêm thông tin và chú thích bổ sung, tùy chỉnh phông chữ và màu sắc, v.v. (xem bài đăng trên blog để biết chi tiết)
timevis
trong R
trông mát mẻ và đơn giản. :-)
Một ggplot2
biểu đồ gantt đơn giản .
Đầu tiên, chúng tôi tạo một số dữ liệu.
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"))
Bây giờ vẽ cốt truyện.
ggplot(mdfr, aes(value, name, colour = is.critical)) +
geom_line(size = 6) +
xlab(NULL) +
ylab(NULL)
Cân nhắc sử dụng góiprojmanr
(phiên bản 0.1.0 được phát hành trên CRAN vào ngày 23 tháng 8 năm 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
Bây giờ bắt đầu chuẩn bị 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)
Gói plan
hỗ trợ tạo biểu đồ burndown và sơ đồ gantt và chứa một plot.gantt
chức năng. Xem trang Sổ tay hướng dẫn đồ họa R này
Xem thêm cách tạo một trong R bằng cách sử dụng SẠC GANTT API R của Plotly TRONG R SỬ DỤNG NHIỀU LẦN .
Bạn có thể làm điều đó với gói 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)
Nguồn: https://cran.r-project.org/web/packages/googleVis/vignettes/googleVis_examples.html
Tôi đã sử dụng và sửa đổi ví dụ trên từ Richie, hoạt động như một sự quyến rũ. Phiên bản đã sửa đổi để cho biết cách mô hình của anh ấy có thể chuyển thành việc nhập dữ liệu CSV thay vì các mục văn bản được cung cấp theo cách thủ công.
LƯU Ý : Câu trả lời của Richie bị thiếu chỉ báo rằng cần có 2 gói ( reshape và ggplot2 ) để mã trên / dưới hoạt động.
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()
Đây là một bài đăng mà tôi đã viết về việc sử dụng ggplot để tạo thứ gì đó giống như biểu đồ Gantt. Không quá phức tạp, nhưng có thể cung cấp cho bạn một số ý tưởng.
Đối với tôi, Gvistimeline là công cụ tốt nhất để làm điều này, nhưng kết nối trực tuyến bắt buộc của nó không hữu ích đối với tôi. Vì vậy, tôi đã tạo một gói có tên là vistime
sử dụng plotly
(tương tự như câu trả lời của @Steven Beaupré), vì vậy bạn có thể phóng to, v.v.:
https://github.com/shosaco/vistime
vistime
: Tạo lịch trình tương tác hoặc biểu đồ Gantt bằng cách sử dụng plotly.js. Các biểu đồ có thể được đưa vào ứng dụng Shiny và được thao tác thông qua 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")
Thư viện PlotPrjNetworks cung cấp các Công cụ Mạng hữu ích cho Quản lý Dự án.
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)
Tôi muốn cải thiện ggplot-Answer với một số thanh cho mỗi nhiệm vụ.
Đầu tiên hãy tạo một số dữ liệu (dfrP là data.frame của câu trả lời khác, dfrR là một số data.frame khác với ngày thực hiện và mdfr là sự hợp nhất phù hợp với câu lệnh ggplot () -) sau:
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)
Bây giờ vẽ biểu đồ dữ liệu này bằng cách sử dụng các khía cạnh cho tên nhiệm vụ:
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)
Nếu không có thông tin tới hạn, bạn cũng có thể sử dụng Plan / Real làm màu sắc (mà tôi rất thích), nhưng tôi muốn sử dụng data.frame của câu trả lời khác để so sánh tốt hơn.
Tìm thấy geom_segment trong ggplot thật tuyệt. Từ các giải pháp trước sử dụng dữ liệu nhưng không cần phải tan chảy.
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)
Bạn có thể xem bài đăng này. Điều này sử dụng R và ggplot.
https://dwh-businessintelligence.blogspot.nl/2016/05/what-if-for-project-management.html