Диаграммы Ганта с R - PullRequest
       64

Диаграммы Ганта с R

73 голосов
/ 23 августа 2010

Кто-нибудь использовал R для создания диаграммы Ганта ?Единственное известное мне решение - это , но я ищу что-то более сложное, если это возможно (более или менее похоже на это или это ).

PS Я мог бы жить без стрелок зависимости.

Ответы [ 13 ]

1 голос
/ 29 декабря 2015

Я бы хотел улучшить ggplot-Answer несколькими барами для каждой задачи.

Сначала сгенерируйте некоторые данные (dfrP - это data.frame другого ответа, dfrR - это некоторый другой data.frame с датами реализации, а mdfr - это слияние, подходящее для следующего оператора ggplot () -):

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)

Теперь постройте эти данные, используя фасеты для имени задачи:

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)

Без is.critical-information вы также можете использовать Plan / Real в качестве цвета (что я бы предпочел), но я хотел использовать data.frame другого ответа, чтобы сделать его лучше сопоставимым.

1 голос
/ 22 июля 2015

Библиотека PlotPrjNetworks предоставляет полезные сетевые инструменты для управления проектами.

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)

enter image description here

0 голосов
/ 21 февраля 2019

Нашел geom_segment в ggplot - это здорово. Из предыдущих решений использовать данные, но не нужно таять.

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)

GantPlot

...