Steve Hwang Steve Hwang - 2 months ago 45
R Question

Error in plot.new() : figure margins too large in R

I'm new to R but I've made numerous correlation plots with smaller data sets. However, when I try to plot a large dataset (2gb+), I can produce the plot just fine, but the legend doesn't show up. Any advice? or alternatives?

> library(gplots)
> r.cor <- cor(r)
> layout(matrix(c(1,1,1,1,1,1,1,1,2,2), 5, 2, byrow = TRUE))
> par(oma=c(5,7,1,1))
> cx <- rev(colorpanel(25,"yellow","black","blue"))
> leg <- seq(min(r.cor,na.rm=T),max(r.cor,na.rm=T),length=10)
> image(r.cor,main="Correlation plot Normal/Tumor data",axes=F,col=cx)
> axis(1, at=seq(0,1,length=ncol(r.cor)), labels=dimnames(r.cor)[[2]],
+ cex.axis=0.9,las=2)
> axis(2,at=seq(0,1,length=ncol(r.cor)), labels=dimnames(r.cor)[[2]],
+ cex.axis=0.9,las=2)
> image(as.matrix(leg),col=cx,axes=T)

Error in plot.new() : figure margins too large

> tmp <- round(leg,2)
> axis(1,at=seq(0,1,length=length(leg)), labels=tmp,cex.axis=1)

Answer

I suspect the problem is that the small figure region 2 created by your layout() call is not sufficiently large enough to contain just the default margins, let alone a plot.

Before the line causing the problem try:

par(mar = rep(2, 4))

then plot the second image

image(as.matrix(leg),col=cx,axes=T)

You'll need to play around with the size of the margins on the par() call I show to get this right. You may also need to increase the size of the actual device onto which you are plotting.

A final tip, save the par() defaults before changing them, so change your existing par() call to:

op <- par(oma=c(5,7,1,1))

then at the end of plotting do

par(op)