[R] Multiple area plots to share the same x-axis

jovian w.heijstek at gmail.com
Tue Mar 29 10:20:46 CEST 2011


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


--
View this message in context: http://r.789695.n4.nabble.com/Multiple-area-plots-to-share-the-same-x-axis-tp3414050p3414050.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list