[R] Changing graphics height when using grid and lattice

From: Jim Price <price_ja_at_hotmail.com>
Date: Thu, 28 Jun 2007 13:47:00 -0700 (PDT)

Hi,

I have recently been playing with the grid package in an attempt to create some pages containing multiple lattice plots on the same page. However, when I specify a grid layout with different widths, such as:

pushViewport(viewport(layout = grid.layout(1, 2, unit(c(2, 1), "null"))))

the individual graphs do not end up as the same height - which is a feature I would prefer to have.

A complete example is as follows:

### Start of example

library(lattice)
library(Hmisc)
library(grid)


# Incidence data

testData <- data.frame(

	strata = rep(c("CHF : Yes", "CHF : No"), each = 20),
	ae = rep(paste("Adverse Event", 1:10), each = 2),
	trt = rep(c("Active", "Placebo"), 20),
	pct = runif(40, 1, 30)

)

# RR data

testData2 <- data.frame(

	strata = rep(c("CHF : Yes", "CHF : No"), each = 10),
	ae = paste("Adverse Event", 1:10),
	rr = runif(20, 0.5, 5)

)
testData2$lower = testData2$rr / 2
testData2$upper = testData2$rr * 2         

# Combined plot

testPlots <- function(relativeWidth)
{

plot1<- dotplot(

	ae ~ pct | strata, 
	groups = trt, 
	data = testData,  
	layout = c(1, 2),
	xlab = "Percent",
	auto.key = list(space = "top", columns = 2)
)

plot2 <- Dotplot(

	ae ~ Cbind(rr, log10(lower), log10(upper)) | strata,
	data = testData2,
	panel = function(...)
	{
		panel.Dotplot(...)
		panel.abline(v = 0, col = 'red', lty = 2)
	},
	layout = c(1, 2), 
	scales = list(
		x = list(log = T, at = c(0.125, 0.25, 0.5, 1, 2, 4, 8, 16, 32)),
		y = list(draw = F)
	),
	xlab = "Relative Risk with 95% CI",
	ylab = "",
	key = list(text = list(""))

)

grid.newpage()

pushViewport(viewport(layout = grid.layout(2, 1, heights = unit(c(1, 6), "null"))))

pushViewport(viewport(layout.pos.col = 1, layout.pos.row = 1)) grid.text("Analysis of Relative Risks of various Adverse Events") upViewport()

pushViewport(viewport(layout.pos.col = 1, layout.pos.row = 2))

### Change the relative width of the 2 presented graphics pushViewport(viewport(layout = grid.layout(1, 2, unit(c(relativeWidth, 1), "null"))))

pushViewport(viewport(layout.pos.col = 1, layout.pos.row = 1)) print(plot1, newpage = F)
upViewport()

pushViewport(viewport(layout.pos.col = 2, layout.pos.row = 1)) print(plot2, newpage = F)
upViewport()

}

# Everything is fine, both graphs maintain the same y-axis
testPlots(1)

# The second graph is now "taller" than the first one
win.graph()
testPlots(3)

##### End of example

I've been through the documentation of both lattice and grid, and I have not been able to find the answer. I would appreciate any solution!

Regards,

James Price.

-- 
View this message in context: http://www.nabble.com/Changing-graphics-height-when-using-grid-and-lattice-tf3996724.html#a11350733
Sent from the R help mailing list archive at Nabble.com.

______________________________________________
R-help_at_stat.math.ethz.ch 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.
Received on Thu 28 Jun 2007 - 21:39:26 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Fri 29 Jun 2007 - 00:32:40 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.