Диаграммы Ганта с R
кто-нибудь использовал R для создания диаграмма Ганта? Единственное решение, которое я знаю-это этой, но я ищу что-то более сложное, если это возможно (больше или меньше, как этой или этой).
P. S. Я могла жить без стрелки зависимостей.
12 ответов:
теперь есть несколько элегантных способов создания диаграммы Ганта в R.
Используя Кандела
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)
С Помощью 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 ")
найти этот пример и многое другое на
DiagrammeR
GitHub
если ваши данные хранятся в
data.frame
, вы можете создать строку для передачи вmermaid()
путем ее преобразования к правильному формату.рассмотрим следующее:
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
используя
dplyr
иtidyr
(или любой из ваших любимых спорных ресурсов данных):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" ) )
согласно упомянутому @GeorgeDontas в комментариях, есть маленький хак это может позволить изменить метки оси x на даты вместо 'w. 01, w.02'.
предполагая, что вы сохранили выше русалка график в
m
, делать:m$x$config = list(ganttConfig = list( axisFormatter = list(list( "%b %d, %Y" ,htmlwidgets::JS( 'function(d){ return d.getDay() == 1 }' ) )) ))
что дает:
используя timevis
С
timevis
GitHub:
timevis
позволяет создавать богатые и полностью интерактивный "временная шкала" визуализации в R. Timelines могут быть включены в Shiny apps и R уценка документов или просмотр с консоли R и 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)
что дает:
используя plotly
я наткнулся на это post предоставление другого метода с помощью
plotly
. Вот пример: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
что дает:
затем вы можете добавить дополнительную информацию и аннотации, настроить шрифты и цвета и т. д. (см. блог сообщение для деталей)
простой
ggplot2
диаграмма Ганта.во-первых, мы создаем некоторые данные.
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"))
теперь нарисуйте сюжет.
ggplot(mdfr, aes(value, name, colour = is.critical)) + geom_line(size = 6) + xlab(NULL) + ylab(NULL)
использовать пакета
projmanr
(версия 0.1.0 выпущено на CRAN 23 августа 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
теперь начинаем готовить Ганта:
# 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)
вы можете сделать это с помощью тега пакет 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)
Источник: https://cran.r-project.org/web/packages/googleVis/vignettes/googleVis_examples.html
вот пост что я написал на использование ggplot для создания чего-то вроде диаграммы Ганта. Не очень сложный, но может дать вам некоторые идеи.
я использовал и модифицировал приведенный выше пример от Ричи, работал как шарм. Измененная версия, чтобы показать, как его модель может переводить в прием данных CSV, а не вручную предоставленные текстовые элементы.
Примечание: в ответе Ричи отсутствовало указание на то, что 2 пакета (изменить и ggplot2) необходимы для работы кода выше / ниже.
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()
библиотека 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)
Я хотел бы улучшить ggplot-ответ с несколькими барами для каждой задачи.
сначала создайте некоторые данные (dfrP-это данные.фрейм другого ответа, dfrR-это некоторые другие данные.фрейм с датами реализации и mdfr - это слияние, подходящее для следующего оператора 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)
теперь постройте эти данные, используя фасеты для имени задачи:
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)
не является.критическая информация вы также можете использовать Plan / Real как цвет (который я бы предпочел), но Я хотел использовать эти данные.кадр другого ответа, чтобы сделать его лучше сопоставимым.
вы могли бы взглянуть на этот пост. Это использует R и ggplot.
https://dwh-businessintelligence.blogspot.nl/2016/05/what-if-for-project-management.html
для меня Gvistimeline был лучшим инструментом для этого, но его необходимое подключение к интернету не было полезно для меня. Таким образом я создал пакет calles
vistime
используетplotly
(аналогично ответу @Steven Beaupré), поэтому вы можете увеличить и т. д.:https://github.com/shosaco/vistime
vistime
: создание интерактивных графиков или диаграмм Ганта с помощью plotly.js. Этот диаграммы могут быть включены в блестящие приложения и манипулировать с помощью plotly_build ().install.packages("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")