Dear all, I am trying (!!!) to generate pdfs that have 8 plots on one page: df = data.frame( day = c(1,2,3,4), var1 = c(1,2,3,4), var2 = c(100,200,300,4000), var3 = c(10,20,300,40000), var4 = c(100000,20000,30000,4000), var5 = c(10,20,30,40), var6 = c(0.001,0.002,0.003,0.004), var7 = c(123,223,123,412), var8 = c(213,123,234,435), all = as.factor(c(1,1,1,1))) pdf("test1.pdf", width=20, heigh=27, paper="a4") print(plot(groupedData(var1 ~ day | all, data = df), main = "var1", xlab="", ylab=""), split=c(1,1,2,4), more=TRUE) print(plot(groupedData(var2 ~ day | all, data = df), main = "var2", xlab="", ylab=""), split=c(1,2,2,4), more=TRUE) print(plot(groupedData(var3 ~ day | all, data = df), main = "var3", xlab="", ylab=""), split=c(1,3,2,4), more=TRUE) print(plot(groupedData(var4 ~ day | all, data = df), main = "var4", xlab="", ylab=""), split=c(1,4,2,4), more=TRUE) print(plot(groupedData(var5 ~ day | all, data = df), main = "var5", xlab="", ylab=""), split=c(2,1,2,4), more=TRUE) print(plot(groupedData(var6 ~ day | all, data = df), main = "var6", xlab="", ylab=""), split=c(2,2,2,4), more=TRUE) print(plot(groupedData(var7 ~ day | all, data = df), main = "var7", xlab="", ylab=""), split=c(2,3,2,4), more=TRUE) print(plot(groupedData(var8 ~ day | all, data = df), main = "var8", xlab="", ylab=""), split=c(2,4,2,4)) dev.off() My problem is that the separate plots all have different sizes. (Some are tall, but very small, or the other way around. The target is to have equally tall and wide graphs. (The variables have different scales. Grouping does not work.) Optimally, the plots would use the complete pdf page. Any ideas how to adjust height and width? Best Marcus
Hi: Is this what you had in mind? library(reshape2) df <- df[, -10] # last variable is superfluous dm <- melt(df, id = 'day') head(dm) day variable value 1 1 var1 1 2 2 var1 2 3 3 var1 3 4 4 var1 4 5 1 var2 100 6 2 var2 200 xyplot(value ~ day | variable, data = dm, scales = list(y = list(relation = 'free'))) melt() is useful in this problem because it stacks the data in 'long' form and creates a factor 'variable' whose levels are the variable names. The variable 'value' contains the responses. Conditioning on 'variable' in dm then gets you individual plots of value ~ day by variable. You can use layout = to specify the arrangement of plots per page, and perhaps as.table = TRUE if you want the plots rendered from top left rather than bottom left. HTH, Dennis On Mon, Nov 8, 2010 at 10:19 AM, Marcus Drescher <drescher@tum.de> wrote:> Dear all, > > I am trying (!!!) to generate pdfs that have 8 plots on one page: > > > df = data.frame( > day = c(1,2,3,4), > var1 = c(1,2,3,4), > var2 = c(100,200,300,4000), > var3 = c(10,20,300,40000), > var4 = c(100000,20000,30000,4000), > var5 = c(10,20,30,40), > var6 = c(0.001,0.002,0.003,0.004), > var7 = c(123,223,123,412), > var8 = c(213,123,234,435), > all = as.factor(c(1,1,1,1))) > > pdf("test1.pdf", width=20, heigh=27, paper="a4") > print(plot(groupedData(var1 ~ day | all, data = df), main = "var1", > xlab="", ylab=""), split=c(1,1,2,4), more=TRUE) > print(plot(groupedData(var2 ~ day | all, data = df), main = "var2", > xlab="", ylab=""), split=c(1,2,2,4), more=TRUE) > print(plot(groupedData(var3 ~ day | all, data = df), main = "var3", > xlab="", ylab=""), split=c(1,3,2,4), more=TRUE) > print(plot(groupedData(var4 ~ day | all, data = df), main = "var4", > xlab="", ylab=""), split=c(1,4,2,4), more=TRUE) > print(plot(groupedData(var5 ~ day | all, data = df), main = "var5", > xlab="", ylab=""), split=c(2,1,2,4), more=TRUE) > print(plot(groupedData(var6 ~ day | all, data = df), main = "var6", > xlab="", ylab=""), split=c(2,2,2,4), more=TRUE) > print(plot(groupedData(var7 ~ day | all, data = df), main = "var7", > xlab="", ylab=""), split=c(2,3,2,4), more=TRUE) > print(plot(groupedData(var8 ~ day | all, data = df), main = "var8", > xlab="", ylab=""), split=c(2,4,2,4)) > dev.off() > > > My problem is that the separate plots all have different sizes. (Some are > tall, but very small, or the other way around. The target is to have equally > tall and wide graphs. (The variables have different scales. Grouping does > not work.) > > Optimally, the plots would use the complete pdf page. > > Any ideas how to adjust height and width? > > Best > Marcus > > ______________________________________________ > 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]]
Another solution is using grid.arrange in the gridExtra package. This works like the par(mfrow=...) command, but for grid-based graphics like lattice and ggplot2 On Nov 8, 2010, at 1:19 PM, Marcus Drescher wrote:> Dear all, > > I am trying (!!!) to generate pdfs that have 8 plots on one page: > > > df = data.frame( > day = c(1,2,3,4), > var1 = c(1,2,3,4), > var2 = c(100,200,300,4000), > var3 = c(10,20,300,40000), > var4 = c(100000,20000,30000,4000), > var5 = c(10,20,30,40), > var6 = c(0.001,0.002,0.003,0.004), > var7 = c(123,223,123,412), > var8 = c(213,123,234,435), > all = as.factor(c(1,1,1,1))) > > pdf("test1.pdf", width=20, heigh=27, paper="a4") > print(plot(groupedData(var1 ~ day | all, data = df), main = "var1", xlab="", ylab=""), split=c(1,1,2,4), more=TRUE) > print(plot(groupedData(var2 ~ day | all, data = df), main = "var2", xlab="", ylab=""), split=c(1,2,2,4), more=TRUE) > print(plot(groupedData(var3 ~ day | all, data = df), main = "var3", xlab="", ylab=""), split=c(1,3,2,4), more=TRUE) > print(plot(groupedData(var4 ~ day | all, data = df), main = "var4", xlab="", ylab=""), split=c(1,4,2,4), more=TRUE) > print(plot(groupedData(var5 ~ day | all, data = df), main = "var5", xlab="", ylab=""), split=c(2,1,2,4), more=TRUE) > print(plot(groupedData(var6 ~ day | all, data = df), main = "var6", xlab="", ylab=""), split=c(2,2,2,4), more=TRUE) > print(plot(groupedData(var7 ~ day | all, data = df), main = "var7", xlab="", ylab=""), split=c(2,3,2,4), more=TRUE) > print(plot(groupedData(var8 ~ day | all, data = df), main = "var8", xlab="", ylab=""), split=c(2,4,2,4)) > dev.off() > > > My problem is that the separate plots all have different sizes. (Some are tall, but very small, or the other way around. The target is to have equally tall and wide graphs. (The variables have different scales. Grouping does not work.) > > Optimally, the plots would use the complete pdf page. > > Any ideas how to adjust height and width? > > Best > Marcus > > ______________________________________________ > 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.