I would like to plot three graphs, one above the other, of three ?y? variables that have different scales against a common Date variable, as with the code below. Q1. If I understand correctly, I can't use lattice graphics because my y's have different scales. Is that correct? All the lattice or trellis plots I've seen have common ?y? scales for all plots. I have two problems with what this code produces: Q2. How can I get the vertical dimension of all three plots to be the same? I know that I've made them different by using different mar numbers, but I had to do that, I thought, to leave room for date axis labels. I don't want to leave wasted space between the plots. Q3. Why are my dates not coming out in the format I've specified in the axis.Date statement? DateNum <- seq(8248,9247) Date<-as.Date(DateNum, origin="1970/01/01") y1<- runif(1000,0,1) y2<- runif(1000,0,100) y3<- runif(1000,0,10) par(mfrow=c(4,1)) par(mar=c(0,4,0,2)+0.1) plot(y1 ~ Date, xaxt = "n", type = "p",cex=0.7) plot(y2 ~ Date, xaxt = "n", type = "p",cex=0.7) par(mar=c(4,4,0,2)+0.1) plot(y3 ~ Date, xaxt = "n", type = "p",cex=0.7) DateLbls <- seq.Date(from=as.Date("1992/08/01"),to=as.Date("1995/04/27"),by="3 months") axis.Date(side=1,Date,at=DateLbls, labels=DateLbls, format="%m-%y")
On Thu, Feb 27, 2014 at 7:19 PM, David Parkhurst <parkhurs at imap.iu.edu> wrote:> I would like to plot three graphs, one above the other, of three "y" > variables that have different scales against a common Date variable, as with > the code below. > > Q1. If I understand correctly, I can't use lattice graphics because my y's > have different scales. Is that correct? All the lattice or trellis plots > I've seen have common "y" scales for all plots. > > I have two problems with what this code produces: > Q2. How can I get the vertical dimension of all three plots to be the same? > I know that I've made them different by using different mar numbers, but I > had to do that, I thought, to leave room for date axis labels. I don't want > to leave wasted space between the plots. > > Q3. Why are my dates not coming out in the format I've specified in the > axis.Date statement? > > DateNum <- seq(8248,9247) > Date<-as.Date(DateNum, origin="1970/01/01") > y1<- runif(1000,0,1) > y2<- runif(1000,0,100) > y3<- runif(1000,0,10) > par(mfrow=c(4,1)) > par(mar=c(0,4,0,2)+0.1) > plot(y1 ~ Date, xaxt = "n", type = "p",cex=0.7) > plot(y2 ~ Date, xaxt = "n", type = "p",cex=0.7) > par(mar=c(4,4,0,2)+0.1) > plot(y3 ~ Date, xaxt = "n", type = "p",cex=0.7) > DateLbls <- > seq.Date(from=as.Date("1992/08/01"),to=as.Date("1995/04/27"),by="3 months") > axis.Date(side=1,Date,at=DateLbls, labels=DateLbls, format="%m-%y") >Try this: library(lattice) DF <- data.frame(make.groups(y1, y2, y3), Date) xyplot(data ~ Date | which, DF, scales = list(y = list(relation "free")), layout = c(1, 3)) -- Statistics & Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com
On 02/28/2014 11:19 AM, David Parkhurst wrote:> I would like to plot three graphs, one above the other, of three ?y? > variables that have different scales against a common Date variable, as > with the code below. > > Q1. If I understand correctly, I can't use lattice graphics because my > y's have different scales. Is that correct? All the lattice or trellis > plots I've seen have common ?y? scales for all plots. > > I have two problems with what this code produces: > Q2. How can I get the vertical dimension of all three plots to be the > same? I know that I've made them different by using different mar > numbers, but I had to do that, I thought, to leave room for date axis > labels. I don't want to leave wasted space between the plots. >You can get what you want with: layout(matrix(1:3,ncol=1),heights=c(1,1,1.4)) rather than mfrow. Also, try using: # first plot par(mar=c(0,4,4,4)) # second plot par(mar=c(0,4,0,4)) # and yaxt="n" ... axis(4) # third plot par(mar=c(4,4,0,4))> Q3. Why are my dates not coming out in the format I've specified in the > axis.Date statement? >Try DateLbls<-format(seq.Date(...),format="%m-%y") Jim
In addition to the great answers already given, you can equalize the vertical part of each plot by having all the plots have the same margins, but creating an outer margin for the common x-axis. do something like: par(mar=c(0,4,0,2), oma=c(4,0,0,0)) then don't change the margins before the last plot, there will be room below the bottom plot for the x-axis information to go into (or you could place it there using the axis function and the outer argument) and the figure regions will all be the same size after giving room for the outer margin, and since the inner margins all match (did not change) they will give the same vertical space to each plot. On Thu, Feb 27, 2014 at 5:19 PM, David Parkhurst <parkhurs at imap.iu.edu> wrote:> I would like to plot three graphs, one above the other, of three "y" > variables that have different scales against a common Date variable, as with > the code below. > > Q1. If I understand correctly, I can't use lattice graphics because my y's > have different scales. Is that correct? All the lattice or trellis plots > I've seen have common "y" scales for all plots. > > I have two problems with what this code produces: > Q2. How can I get the vertical dimension of all three plots to be the same? > I know that I've made them different by using different mar numbers, but I > had to do that, I thought, to leave room for date axis labels. I don't want > to leave wasted space between the plots. > > Q3. Why are my dates not coming out in the format I've specified in the > axis.Date statement? > > DateNum <- seq(8248,9247) > Date<-as.Date(DateNum, origin="1970/01/01") > y1<- runif(1000,0,1) > y2<- runif(1000,0,100) > y3<- runif(1000,0,10) > par(mfrow=c(4,1)) > par(mar=c(0,4,0,2)+0.1) > plot(y1 ~ Date, xaxt = "n", type = "p",cex=0.7) > plot(y2 ~ Date, xaxt = "n", type = "p",cex=0.7) > par(mar=c(4,4,0,2)+0.1) > plot(y3 ~ Date, xaxt = "n", type = "p",cex=0.7) > DateLbls <- > seq.Date(from=as.Date("1992/08/01"),to=as.Date("1995/04/27"),by="3 months") > axis.Date(side=1,Date,at=DateLbls, labels=DateLbls, format="%m-%y") > > ______________________________________________ > 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.-- Gregory (Greg) L. Snow Ph.D. 538280 at gmail.com