[R] Creating multiple graphs based on one variable

Luc Villandre villandl at dms.umontreal.ca
Tue May 26 16:01:44 CEST 2009

Tim Clark wrote:
> Dear List,
> I would like to create several graphs of similar data.  I have x and y values for several different individuals (in this case fish).  I would like to plot the x and y values for each fish separately.  I can do it using a for loop, but I think I should be using "apply".  Please let me know what I am doing wrong, or if there is a "better" way to do this.  What I have is:
> #Test data
> dat<-data.frame(c(rep(1:10,4)),c(rep(1:10,4)),c(rep(c("Tony","Mike","Vicky","Fred"),each=10)))
> names(dat)<-c("x","y","Name") 
> #Create function to plot x and y
> myplot<-function() plot(dat$x,dat$y)
> #Apply the function to each of the names
> par(mfcol=c(2,2))   
> apply(dat,2,myplot,by=dat$Name) #Does not work - tried various versions
> I would like separate plots for Tony, Mike, and Vicky.  What is the best way to do this?  
> Thank!
> Tim
> Tim Clark
> Department of Zoology 
> University of Hawaii
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

Hi Tim,

I'm now rather fond of Hadley Wickham's ggplot2 package. Its structure 
is most of the times intuitive and it does yield nice-looking output.

In order to solve your problem, taking advantage of the ggplot2 
framework, you can simply use the following:
> library(ggplot2) ;
> ## If you want all the curves to be on the same plotting grid ;
> p <- ggplot(dat, aes(x=x,y=y, group=Name)) ;
> p + geom_line(aes(colour=Name)) ; ## Only one curve will be visible 
> since they are all superposed.
> ## If you want the curves to be on separate plotting grids ;
> p <- ggplot(dat, aes(x=x,y=y, group=Name)) ;
> p <- p + geom_line(aes(colour=Name)) ;
> p+facet_grid(. ~ Name) ;
Hope this helps,
*Luc Villandré*
McGill University Health Center -
Montreal Children's Hospital Research Institute/

More information about the R-help mailing list