Dear Ann, The easiest way is to seperate both plots into two subplots. And then use viewport to paste them together.
Best regards, Thierry p1 <- ggplot(subset(data.melt, pos = "FALSE"),aes(value,ID)) + geom_point(aes(groups=time,colour=time,shape=time)) + facet_grid(type~.,scales="free",space="free") + opts(strip.text.y=theme_text())+ xlab(NULL) + ylab(NULL)+ opts(axis.text.x = theme_text(angle = 90, hjust = 1, size = 8)) + opts(legend.text = theme_text(hjust=1, size = 8))+ opts(legend.position="top",legend.direction="horizontal")+ scale_shape_manual(values = c(1,3,0,2),name="") + scale_colour_manual(values = c("red","red","royalblue4","mediumvioletred"),name="") p2 <- ggplot(subset(data.melt, pos = "TRUE"),aes(value,ID)) + geom_point(aes(groups=time,colour=time,shape=time)) + facet_grid(type~.,scales="free",space="free") + opts(strip.text.y=theme_text())+ xlab(NULL) + ylab(NULL)+ opts(axis.text.x = theme_text(angle = 90, hjust = 1, size = 8)) + opts(legend.text = theme_text(hjust=1, size = 8))+ opts(legend.position="top",legend.direction="horizontal")+ scale_shape_manual(values = c(1,3,0,2),name="") + scale_colour_manual(values = c("red","red","royalblue4","mediumvioletred"),name="") vp1 <- viewport(width = 1/3, height = 1, x = 1/6, y = 0.5) vp2 <- viewport(width = 2/3, height = 1, x = 4/6, y = 0.5) print(p1, vp = vp1) print(p1, vp = vp2) ---------------------------------------------------------------------------- ir. Thierry Onkelinx Instituut voor natuur- en bosonderzoek team Biometrie & Kwaliteitszorg Gaverstraat 4 9500 Geraardsbergen Belgium Research Institute for Nature and Forest team Biometrics & Quality Assurance Gaverstraat 4 9500 Geraardsbergen Belgium tel. + 32 54/436 185 thierry.onkel...@inbo.be www.inbo.be To call in the statistician after the experiment is done may be no more than asking him to perform a post-mortem examination: he may be able to say what the experiment died of. ~ Sir Ronald Aylmer Fisher The plural of anecdote is not data. ~ Roger Brinner The combination of some data and an aching desire for an answer does not ensure that a reasonable answer can be extracted from a given body of data. ~ John Tukey > -----Oorspronkelijk bericht----- > Van: r-help-boun...@r-project.org > [mailto:r-help-boun...@r-project.org] Namens Strategische > Analyse CSD Hasselt > Verzonden: vrijdag 11 februari 2011 10:09 > Aan: r-help@r-project.org > Onderwerp: Re: [R] Ggplot: free x-scales in a facet-grid > > Hello, > > hereby the code with example data, as an attach to my > question (see mail > below). > Thank you! > Ann > > library(ggplot2) > library(grid) > library(RColorBrewer) > library(car) > library(reshape) > > #make dataframe > ID=c("a","b","c","d","e","f","g","h","i","j") > type=c("type1","type2","type3","type2","type2","type1","type2" > ,"type1","type1","type3") > dat_feit_lo=c(13229222400,13510803600,13463193600,13491619200, > 13502732400,13514315400,13463193600,13514718600,13514497200,13 > 515031800) > dat_feit_hi=c(13502591940,13510803600,13464798000,13508697600, > 13514036100,13514315400,13507862400,13514719380,13514432400,13 > 515036600) > dat_pol=c(13512488400,13510877580,13468415940,13508697600,1351 > 4036100,13514315400,13513528800,13514719380,13514809800,13515037260) > dat_avv_start=c(13512502320,13510936200,13513705980,1351422744 > 0,13514217300,13514396280,13514636520,13514810580,13514909640, > 13515099060) > feiten<-data.frame(ID,type,dat_feit_lo,dat_feit_hi,dat_pol,dat > _avv_start) > > #make POSIX of date variables > feiten$dat_feit_lo<-as.POSIXct(feiten$dat_feit_lo, > origin="1582-10-14",tz="GMT") > feiten$dat_feit_hi<-as.POSIXct(feiten$dat_feit_hi, > origin="1582-10-14",tz="GMT") > feiten$dat_pol<-as.POSIXct(feiten$dat_pol, > origin="1582-10-14",tz="GMT") > feiten$dat_avv_start<-as.POSIXct(feiten$dat_avv_start, > origin="1582-10-14",tz="GMT") > > #sort & melt data# > feiten$ID<-with(feiten,reorder(reorder(reorder(ID,1/as.numeric > (dat_pol)),1/as.numeric(dat_avv_start)),as.numeric(type))) > sortframe=function(df,...)df[do.call(order,list(...)),] > data_sort<-with(feiten,sortframe(feiten,as.numeric(type),1/as. > numeric(dat_avv_start),1/as.numeric(dat_pol))) > data.melt<-melt.data.frame(data_sort, id=c("ID","type"), > variable_name = > "time") > levels(data.melt$time)<-c("fact low","fact > high","complaint","hearing") > > > #make plot# > data.melt$pos<-data.melt$value>as.POSIXlt("2010-12-01 00:00:00") > data.melt$pos[is.na(data.melt$pos)]<-'FALSE' > > plot<- > ggplot(data.melt,aes(value,ID)) + > geom_point(aes(groups=time,colour=time,shape=time)) + > facet_grid(type~pos,scales="free",space="free") + > opts(strip.text.y=theme_text())+ > xlab(NULL) + ylab(NULL)+ > opts(axis.text.x = theme_text(angle = 90, hjust = 1, size = 8)) + > opts(legend.text = theme_text(hjust=1, size = 8))+ > opts(legend.position="top",legend.direction="horizontal")+ > scale_shape_manual(values = c(1,3,0,2),name="") + > scale_colour_manual(values = > c("red","red","royalblue4","mediumvioletred"),name="") > > > ----- Original Message ----- > From: "Strategische Analyse CSD Hasselt" <csd...@fedpolhasselt.be> > To: <r-help@R-project.org> > Sent: Thursday, February 10, 2011 2:40 PM > Subject: Ggplot: free x-scales in a facet-grid > > > > Hello, > > > > I have a ggplot that has the looks of the plot that I want, > but it doesn't > > have the right layout. > > > > The data is an ordered melted dataframe: > > - ID > > - type (to use for a faced grid) > > - time - type > > - time - value (POSIXct) > > - pos (to use for a faced grid, this is an index to split the plot) > > > > The goal of the plot is to create a time line for each ID > (different > > points of time). The ID's are split in facets according to > their type. > > > > The plot will look like this (the numbers refer to the ID, > the letters to > > the time values): > > > > 1 x o s TYPE1 > > 2 x o s > > 3 x o s TYPE2 > > 4 x o s TYPE3 > > > > The data are ordered within each type, according to date 's'. > > > > Now here's the problem. The most data are between the > periode 01/12/2010 > > and 31/01/2011. But there are some outliers, going back to 2003. > > Now I would like to split the plot in 2 (based on the index > 'pos', split > > date = 01/12/2010), so the left part of the plot are the > time values > > before this date (scale_x_datetime major = 1 year), and the > right part of > > the plot are the time values after this date > (scale_x_datetime major=1 > > day). > > > > Hereby also the R-code (simplified): > > ggplot(data_plot.melt,aes(timevalue,ID)) + > > geom_point(aes(groups=timetype,colour=timetype,shape=timetype)) + > > facet_grid(type ~pos,scales="free",space="free") + > > xlab(NULL) + ylab(NULL) > > > > The scales of y has to be free, because the number of ID's per type > > differ. The scales of x has to be free, so the scales > differ in the left > > and right part of the plot. > > This code succeeds in my goal, but the left part of the > plot is very big, > > and the right part very very small. However, the most > important part of > > the plot is the right part. The left part is only to > mention the outliers, > > to read the plot correctly. > > > > I don't know if it's possible to get a plot like I want? > > > > Before I added the following code to make the plot, but > then I loose the > > information of every time value before 01/12/2010: > > + scale_x_datetime (major = "1 > > days",limits=c(as.numeric(as.POSIXlt("2010-12-01 > > 00:00:00")),as.numeric(as.POSIXlt("2011-01-31 22:00:00"))),format = > > "%b-%d",expand=c(0,0)) > > > > Thank you very much in advance! > > > > Ann Frederix > > ______________________________________________ > R-help@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. > ______________________________________________ R-help@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.