Sunday, September 23, 2012

Create a filled line graph with R

I used the code below to create a presentation-quality graph of data on how individual's activation level (measured as electrodermal activity) changes over time during a group-based task. (Click on the image to enlarge.)

par(family="Tahoma", bg="white", mar=c(3,3,3,3), mgp=c(1,1,1))

ylim <- c(-1.5, 1.5)
xlim <- c(-540, 2700)
x <- aggsub$task_time
y <- aggsub$eda_z
ylo <- rep(min(y), length(y))
plot(x,y, type="n", ylim=ylim, axes=FALSE, ylab="Electrodermal Activity", xlab="Time (in minutes)", xlim=xlim, col="dark green")

xpos <- seq(-540, 2700, 180)
lab <- seq(-9, 45, 3)
axis(1, at=xpos, labels=lab, cex =1.5, lwd=.5, lty=3, tck=1, col="dark gray", pos=-1.5, col.axis="dark gray")

ypos <- seq(-1.5, 1.5, .5)
axis(2, at=ypos , labels=ypos, cex =1.5, las=2, tck=1, lwd=.5, lty=3, col="dark gray", pos=-540, col.axis="dark gray")

zerox <- -540:2700
zeroy <- rep(0, length(zerox))
lines(zerox, zeroy, lty=1, lwd=2, col="red")

lines(x,y, lwd=2.5,col="dark green")
xx <- c(x, rev(x))
yy <- c(ylo, rev(y))   
polygon(xx, yy, col="light green", border=FALSE)

sessionstart <- min(x)
taskstart <- 0
taskend <- 1800
recordend <- 1920
sessionend <- max(x)

polygon(c(sessionstart, sessionstart, taskstart, taskstart), c(1.5, min(y), min(y), 1.5), col="#0015FF25", border=FALSE)
text(-270, 1.25, "Pre-Task Survey", col="dark blue")

#polygon(c(taskstart, taskstart, taskend, taskend), c(1.5, min(y), min(y), 1.5), col="#EAFF0025", border=FALSE)
text(900, 1.25, "Group Members Work to Develop Recruitment Video", col="dark green")

polygon(c(taskend, taskend, recordend, recordend), c(1.5, min(y), min(y), 1.5), col="#FA050535", border=FALSE)
text(recordend-(recordend-taskend)/2, 1.25, "Record\nVideo", col="red")

polygon(c(recordend, recordend, sessionend, sessionend), c(1.5, min(y), min(y), 1.5), col="#0015FF25", border=FALSE)
text(sessionend-(sessionend-recordend)/2, 1.25, "Post-Task Survey", col="dark blue")

No comments:

Post a Comment