Multiple area plots to share the same x-axis

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Multiple area plots to share the same x-axis

jovian
Hello,

I asked a similar question before but in an existing thread. I am not sure if it is proper etiquette to repost a similar question as a new tread, I think in this case, it might be because this way more people can see it and perhaps learn from it. (Also, part of the existing thread became private)

I want to know how to plot multiple ggplot area plots on top of one another so that the same x-axis is shared?

This solution simply stitches multiple plots on top of each other:

vp.layout <- function(x, y) viewport(layout.pos.row=x, layout.pos.col=y)
arrange <- function(..., nrow=NULL, ncol=NULL, as.table=FALSE) {
 dots <- list(...)
 n <- length(dots)
 if(is.null(nrow) & is.null(ncol)) { nrow = floor(n/2) ; ncol = ceiling(n/nrow)}
 if(is.null(nrow)) { nrow = ceiling(n/ncol)}
 if(is.null(ncol)) { ncol = ceiling(n/nrow)}
        ## NOTE see n2mfrow in grDevices for possible alternative
grid.newpage()
pushViewport(viewport(layout=grid.layout(nrow,ncol) ) )
 ii.p <- 1
 for(ii.row in seq(1, nrow)){
 ii.table.row <- ii.row
 if(as.table) {ii.table.row <- nrow - ii.table.row + 1}
  for(ii.col in seq(1, ncol)){
   ii.table <- ii.p
   if(ii.p > n) break
   print(dots[[ii.table]], vp=vp.layout(ii.table.row, ii.col))
   ii.p <- ii.p + 1
  }
 }
}

set <- read.table(file="http://www.jovian.nl/set.csv", head=1,  sep=",")
set2 <- read.table(file="http://www.jovian.nl/set2.csv", head=1,  sep=",")
library(ggplot2)
s <- ggplot(set, aes(x = time, y = hours)) + geom_area(colour = 'red', fill = 'red', alpha = 0.5) +
     geom_area(stat = 'smooth', span = 0.2, alpha = 0.3) + ylim(0,40)
s1 <- ggplot(set2, aes(x = time, y = hours)) + geom_area(colour = 'red', fill = 'red', alpha = 0.5) +
     geom_area(stat = 'smooth', span = 0.2, alpha = 0.3) + ylim(0,40)
arrange(s,s1,ncol=1)


The arrange() function was taken from http://gettinggeneticsdone.blogspot.com/2010/03/arrange-multiple-ggplot2-plots-in-same.html. In this example, the x-axes are only similar because the data sets have the same range. In effect nothing more happens than that two images are plotted on top of one another. Now how to "merge" these two (and later more) area plots on top of each other so that they share the same x-axis (so that only one x-axis would be necessary on the bottom of the plot)?

Thanks,

Werner