[R] Code contributed for a gant (Gantt) chart

Waichler, Scott R
Fri, 14 Jan 2005 16:25:10 -0000

I searched CRAN for material on gant (or Gantt) charts, those schedule
plots that look like horizontal barplots where the x-axis is time.
Finding none, I wrote the following and am submitting it to the archive
so that it may help someone in the future.

plotfile <- "gant.eps"

regular.color <- "lightgray"
important.color <- "yellow"

tasks <- list()  # Define tasks.  Start and end refer to times.
tasks[[length(tasks) + 1]] <-
  list(name = "Name of first task", start = 0, end = 3, color
regular.color)
tasks[[length(tasks) + 1]] <-
  list(name = "Name of second task", start = 3, end = 7, color
regular.color)
tasks[[length(tasks) + 1]] <-
  list(name = "Name of third task", start = 3, end = 7, color
regular.color)
tasks[[length(tasks) + 1]] <-
  list(name = "Name of fourth task", start = 5, end = 9, color
important.color)
tasks[[length(tasks) + 1]] <-
  list(name = "Name of fifth task", start = 3, end = 8, color
regular.color)
tasks[[length(tasks) + 1]] <-
  list(name = "Name of sixth task", start = 3, end = 11, color
important.color)

num.tasks <- length(tasks)
task.labels <- rep(NA, num.tasks)
task.times <- NULL
for(i in 1:num.tasks) {
  task.labels[i] <- paste(i, ". ", tasks[[i]]$name)
  task.times <- c(task.times, tasks[[i]]$start, tasks[[i]]$end)
}

# Make the plot
ps.options(onefile=T, print.it=F, paper="special", width=8.5,
height=4,
          horizontal=F, pointsize=12, family="Helvetica")
postscript(file=plotfile)

par(omi=c(0.05, 2, 0.5, 0.1))
par(mar=c(0, 2, 0.60, 0.05))

plot(1:3, 1:3,
     ylim=c(1, num.tasks) , xlim=range(task.times),
     main="", xlab = "",
     xaxs="i", xaxt="n", yaxt="n",
ylab="",
     type="n")
par(mgp = c(3, 0.5, 0))
axis(3, at=min(task.times):max(task.times),
labels=min(task.times):max(task.times),
     cex.axis=1.0, las=1, tcl=-0.3)
reverse.task.numbers <- rev(1:num.tasks)
axis(2, at=reverse.task.numbers, labels=task.labels, cex.axis=1.0,
las=1, tcl=-0.2)
abline(v=c(min(task.times):max(task.times)), col="darkgray", lty=3)

half.height <- 0.25
for(i in 1:num.tasks) {
  rect(tasks[[i]]$start, reverse.task.numbers[i] - half.height,
tasks[[i]]$end,
       reverse.task.numbers[i] + half.height, col = tasks[[i]]$color,
border = F)
}
box()

mtext("Month", side=3, outer=F, line=2, cex=1.1) # x-axis label

dev.off()

Scott

Scott Waichler, Senior Research Scientist
Pacific Northwest National Laboratory
MSIN K9-36
P.O. Box 999
Richland, WA   99352    USA
509-372-4423 (voice)
509-372-6089 (fax)
scott.waichler at pnl.gov