Hi: To get the plots precisely as you have given them in your png file, you're most likely going to have to use base graphics, especially if you want a separate legend in each panel. Packages ggplot2 and lattice have more structured ways of constructing such graphs, so you give up a bit of freedom in the details of plot construction to get nicer default configurations.
Perhaps you've written a panel function in S-PLUS (?) to produce each graph in your png file - if so, you could simply add a couple of lines to determine the max y-value and from that the limits of the y scale. It shouldn't be at all difficult to make such modifications. Since R base graphics is very similar to base graphics in S-PLUS, you could possibly get away with popping your S-PLUS code directly into R and see how far that takes you. Lattice is based on Trellis graphics, but the syntax in lattice has changed a fair bit vis a vis Trellis as the package has developed. ggplot2 is a more recent graphics system in R predicated on the grammar of graphics exposited by Leland Wilkinson. For my example, I've modified the Theophylline data set in package nlme, described in Pinheiro & Bates (2000), Mixed Effects Models in S and S-PLUS, Springer. The original data set has eleven unique doses - I combined them into three intervals and converted them to factor with cut(). I also created four groups of Subjects and put them into a variable ID. The output data frame is called theo. I didn't fit the nlme models to the subjects - instead, I was lazy and used loess smoothing instead. The code to generate the data frame is given below; this is what we mean by a 'reproducible example', something that can be copied and pasted into an R session. # Use modified version of Theophylline data in package nlme library(nlme) theo <- Theoph theo <- subset(theo, Dose > 3.5) theo$dose <- cut(theo$Dose, breaks = c(3, 4.5, 5, 6), labels = c('4.25', '4.8', '5.5')) theo <- as.data.frame(theo) theo$ID <- with(theo, ifelse(Subject %in% c(6, 7, 12), 1, ifelse(Subject %in% c(2, 8, 10), 2, ifelse(Subject %in% c(4, 11, 5), 3, 4) ))) # ID is used for faceting, dose for color and shape # lattice version: xyplot(conc ~ Time | factor(ID), data = theo, col.line = 1:3, pch = 1:3, col = 1:3, groups = dose, type = c('p', 'smooth'), scales = list(y = list(relation = 'free')), auto.key = list(corner = c(0.93, 0.4), lines = TRUE, points = TRUE, text = levels(theo$dose)) ) # ggplot2 version: # scales = 'free_y' allows independent y scales per panel g <- ggplot(theo, aes(x = Time, y = conc, shape = dose, colour = dose, group = Subject)) g + geom_point() + geom_smooth(method = 'loess', se = FALSE) + facet_wrap( ~ ID, ncol = 2, scales = 'free_y') + opts(legend.position = c(0.9, 0.4)) This is meant to give you some indication how the two graphics systems work - it's a foundation, not an end product. There are a couple of ways I could have adjusted the y-scales in the lattice graphs (either directly in the scales = ... part or to use a prepanel function for loess), but since you're not likely to use loess in your plots, it's not an important consideration. Both ggplot2 and lattice place the legend outside the plot area by default; I've illustrated a couple of ways to pull it into the plot region FYI. One other thing: if your data set contains fitted values from your PK models for each subject * dose combination, the loess smoothing is unnecessary. In ggplot2, you would use geom_line(aes(y = pred), ...) in place of geom_smooth(), and in lattice you would replace 'smooth' by 'l' in the type = argument of xyplot(). HTH, Dennis On Fri, Oct 15, 2010 at 12:46 AM, Anh Nguyen <eataban...@gmail.com> wrote: > Hello Dennis, > > That's a very good suggestion. I've attached a template here as a .png > file, I hope you can view it. This is what I've managed to achieve in S-Plus > (we use S-Plus at work but I also use R because there's some very good R > packages for PK data that I want to take advantage of that is not available > in S-Plus). The only problem with this is, unfortunately, I cannot figure > out how make the scale non-uniform and I hope to fix that. My data looks > like this: > > ID Dose Time Conc Pred ... > 1 5 0 0 0 > 1 5 0.5 6 8 > 1 5 1 16 20 > ... > 1 7 0 0 0 > 1 7 0.5 10 12 > 1 7 1 20 19 > ... > 1 10 3 60 55 > ... > 2 5 12 4 2 > ... > ect > > > I don't care if it's ggplot or something else as long as it looks like how > I envisioned. > > > > > On Fri, Oct 15, 2010 at 12:22 AM, Dennis Murphy <djmu...@gmail.com> wrote: > >> I don't recall that you submitted a reproducible example to use as a >> template for assistance. Ista was kind enough to offer a potential solution, >> but it was an abstraction based on the limited information provided in your >> previous mail. If you need help, please provide an example data set that >> illustrates the problems you're encountering and what you hope to achieve - >> your chances of a successful resolution will be much higher when you do. >> BTW, there's a dedicated newsgroup for ggplot2: >> look for the mailing list link at http://had.co.nz/ggplot2/ >> >> HTH, >> Dennis >> >> >> On Thu, Oct 14, 2010 at 10:02 PM, Anh Nguyen <eataban...@gmail.com>wrote: >> >>> I found 2 problems with this method: >>> >>> - There is only one line for predicted dose at 5 mg. >>> - The different doses are 5, 7, and 10 mg but somehow there is a legend >>> for >>> 5,6,7,8,9,10. >>> - Is there a way to make the line smooth? >>> - The plots are also getting a little crowded and I was wondering if >>> there a >>> way to split it into 2 or more pages? >>> >>> Thanks for your help. >>> >>> On Thu, Oct 14, 2010 at 8:09 PM, Ista Zahn <iz...@psych.rochester.edu >>> >wrote: >>> >>> > Hi, >>> > Assuming the data is in a data.frame named "D", something like >>> > >>> > library(ggplot2) # May need install.packages("ggplot2") first >>> > ggplot(D, aes(x=Time, y=Concentration, color=Dose) + >>> > geom_point() + >>> > geom_line(aes(y = PredictedConcentration, group=1)) + >>> > facet_wrap(~ID, scales="free", ncol=3) >>> > >>> > should do it. >>> > >>> > -Ista >>> > On Thu, Oct 14, 2010 at 10:25 PM, thaliagoo <eataban...@gmail.com> >>> wrote: >>> > > >>> > > Hello-- I have a data for small population who took 1 drug at 3 >>> different >>> > > doses. I have the actual drug concentrations as well as predicted >>> > > concentrations by my model. This is what I'm looking for: >>> > > >>> > > - Time vs Concentration by ID (individual plots), with each subject >>> > > occupying 1 plot -- there is to be 9 plots per page (3x3) >>> > > - Observed drug concentration is made up of points, and predicted >>> drug >>> > > concentration is a curve without points. Points and curve will be the >>> > same >>> > > color for each dose. Different doses will have different colors. >>> > > - A legend to specify which color correlates to which dose. >>> > > - Axes should be different for each individual (as some individual >>> will >>> > have >>> > > much higher drug concentration than others) and I want to see in >>> detail >>> > how >>> > > well predicted data fits observed data. >>> > > >>> > > Any help would be greatly appreciated. >>> > > -- >>> > > View this message in context: >>> > >>> http://r.789695.n4.nabble.com/Time-vs-Concentration-Graphs-by-ID-tp2996431p2996431.html >>> > > Sent from the R help mailing list archive at Nabble.com. >>> > > >>> > > ______________________________________________ >>> > > 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. >>> > > >>> > >>> > >>> > >>> > -- >>> > Ista Zahn >>> > Graduate student >>> > University of Rochester >>> > Department of Clinical and Social Psychology >>> > http://yourpsyche.org >>> > >>> >>> [[alternative HTML version deleted]] >>> >>> >>> ______________________________________________ >>> 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. >>> >> >> > [[alternative HTML version deleted]] ______________________________________________ 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.