Linens
Linens

Reputation: 7942

R par(omd) does not contain within mfrow

I would like two plots to show up in two seperate spaces in the plot so I do:

par(mfrow=c(1,2))
plot(1:10,1:10)

Now I would like the second plot to be about 25% shorter than the first plot so I adjust omd:

tmp <- par()$omd
tmp[4] <- 0.75
par(omd=tmp)
plot(1:10,1:10)

The problem is that the second plot shows up ontop of the first plot. How do I avoid this margin issue?

Upvotes: 0

Views: 699

Answers (1)

joran
joran

Reputation: 173677

Maybe try using layout instead?

layout(matrix(c(1, 1, 0, 2), ncol = 2L), widths = c(1,1),heights = c(0.5,1))
par(mar = c(3,2,2,2))
plot(1:10,1:10)
par(mar = c(3,2,2,2))
plot(1:10,1:10)

enter image description here

I guess maybe you'd want to set the heights to c(0.2,0.8) to get a 25% reduction?

Edit

But I don't think that omd does what you think it does. It changes the region inside the outer margins, which will always include both plot regions when setting par(mfrow = c(1,2)). What you really want to change, I think is plt, which alters the size of the current plotting region (using quartz, as I'm on a mac):

quartz(width = 5,height = 5)
par(mfrow=c(1,2))
vec <- par("plt")
plot(1:10,1:10)
par(plt = vec * c(1,1,1,0.75))
plot(1:5,1:5)

Upvotes: 2

Related Questions