Error en plot.new (): márgenes de figura demasiado grandes en R

111

Soy nuevo en R pero he realizado numerosos gráficos de correlación con conjuntos de datos más pequeños. Sin embargo, cuando trato de trazar un conjunto de datos grande (2gb +), puedo producir el diagrama sin problemas, pero la leyenda no aparece. ¿Algún consejo? o alternativas?

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 en plot.new(): márgenes de la figura demasiado grandes

tmp <- round(leg,2)
axis(1,at=seq(0,1,length=length(leg)), labels=tmp,cex.axis=1)
Steve Hwang
fuente
1
Debe proporcionarnos un ejemplo reproducible que demuestre los males que tiene. stackoverflow.com/questions/12765668/…
Roman Luštrik
Probé todo lo anterior y nada funcionó. Sin embargo, de vez en cuando (al menos para un novato como yo), los datos en una matriz o data.frame pueden haber sido coaccionados a algún tipo que no conocías. En ese caso, use "as.numeric" antes de sus datos para asegurarse de que este no sea el problema.
pApaAPPApapapa

Respuestas:

85

Sospecho que el problema es que la región de figura pequeña 2 creada por su layout()llamada no es lo suficientemente grande como para contener solo los márgenes predeterminados, y mucho menos un gráfico.

Antes de la línea que causa el problema, intente:

par(mar = rep(2, 4))

luego traza la segunda imagen

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

Tendrá que jugar con el tamaño de los márgenes de la par()llamada que muestro para hacerlo bien. También es posible que deba aumentar el tamaño del dispositivo real en el que está trazando.

Un último consejo, guarde los par()valores predeterminados antes de cambiarlos, así que cambie su par()llamada existente a:

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

luego, al final de la trama, haz

par(op)
Gavin Simpson
fuente
Ah, gracias por la aclaración. En su lugar, estaba manipulando el diseño (matrix ()). ¡Agradezco la ayuda!
Steve Hwang
2
esta fue la pista correcta para mí. Tuve que aumentar el tamaño de la imagen o disminuir la resolución enpng(filename="myfile.png", res=150, width = 1000, height = 1000)
vanao veneri
146

Este error puede ocurrir en Rstudio simplemente porque su panel "Plots" es apenas demasiado pequeño. ¡Intente hacer zoom en sus "Archivos, gráficos, paquetes, ayuda, visor" y vea si ayuda!

Steve Pitchers
fuente
8
¡Esto resolvió mi problema! Había ampliado la ventana "Entorno", reduciendo la ventana "Gráficos", etc. Solo tuve que expandir la ventana. ¡Gracias!
Rock Lee
De acuerdo, esto también afectó a mi RStudio, y simplemente expandir la ventana ayudó.
Kingz
A veces termino accidentalmente con varios paneles debido al uso de par (). par(mfrow=c(1,1))puede restablecerlo a un panel.
Matt
1
Fue un error muy extraño para mí, ya que soy nuevo en R. ¡Nunca tuve problemas antes con otros idiomas / IDE donde el diseño IDE afectará mi código!
Adarsha
Genial, esto también funcionó para mí. ¡Qué error tan extraño!
Mohammad
70

Si recibe este mensaje en RStudio, puede que haga clic en la figura de 'palo de escoba' "Borrar todos los gráficos" en la pestaña Gráficos y vuelva a intentarlo.

ingrese la descripción de la imagen aquí

Tal como
fuente
1
Esta es la mejor respuesta.
NewbieDave
15
graphics.off()
rawr
Me gusta esta respuesta
O.rka
Esta es realmente la mejor respuesta. Gracias.
merve bıçakçı
24

Esto sucede a veces en RStudio. Para resolverlo, puede intentar trazar en una ventana externa (solo Windows):

windows() ## create window to plot your file
## ... your plotting code here ...
dev.off() 
jobligado
fuente
1
Esta es una mejor respuesta que comprar un monitor más grande. También hay un comando x11 () que debería funcionar en Linux.
Ron Jensen - Todos somos Monica
1
La respuesta más apropiada jamás. Gracias.
TeeKea
¿Algún equivalente para MacOSX?
TeYaP
Probé esta solución cuando obtengo un Error in plot.new() : figure margins too largeerror en RStudio al dibujar OLS-CUSUM, y funcionó milagrosamente. Muchas gracias jobligado.
Erdogan CEVHER
19

Recibí este error en R Studio y simplemente lo solucioné agrandando la barra lateral haciendo clic y arrastrando su borde de derecha a izquierda.

Janac Meena
fuente
2
este fue el ganador. ¿Por qué es esto siquiera una cosa?
colin
2
Ninguna de las otras soluciones funcionó para mí excepto esta.
zsad512
1
No sé cómo ni por qué, pero esta también fue la única solución que funcionó para mí.
TheSciGuy
10

Compruebe si su objeto es una lista o un vector. Para hacer esto, escriba is.list(yourobject). Si esto es cierto, intente cambiarle el nombre x<-unlist(yourobject). Esto lo convertirá en un vector que puede trazar.

Gina-Maria
fuente
Esto lo hizo por mí (usando png()/ dev.off()en Rstudio).
knowah
5

ingrese la descripción de la imagen aquí

Simplemente amplíe esta área si usa RStudio.

vkalit
fuente
3

Encontré este error hoy. Inicialmente, estaba tratando de enviarlo a un .jpegarchivo con poca anchura y altura.

jpeg("method1_test.jpg", width=900, height=900, res=40)

Luego aumenté el ancho y el alto a:

jpeg("method1_test.jpg", width=1900, height=1900, res=40)

El error no estaba ahí. :)

También puedes jugar con la resolución, si la resolución es alta, necesitas más ancho y alto.

jaikamal
fuente
2

Luché con este error durante semanas (usando RStudio). Intenté mover la ventana de la trama más grande y más pequeña, pero eso no ayudó constantemente. Cuando moví (arrastré) la aplicación a mi monitor más grande, ¡el problema desapareció! Me quedé atónito ... tantas horas desperdiciadas ... sabía que mi código era correcto ...

Liz
fuente
0

El lienzo de RStudio Plots está limitando el ancho y la altura de la parcela. Sin embargo, si haces tu trama de Rmarkdown fragmento de código , funciona sin limitación de campo de lienzo porque el área de trazado se establece de acuerdo con el tamaño del papel.

Por ejemplo:

    ```{r}
#inside of code chunk in Rmarkdown
        grid <- par(mfrow=c(4, 5))
        plot(faithful, main="Faithful eruptions")
        plot(large.islands, main="Islands", ylab="Area")
        ...
        par(grid)
    ```
Suat Atan PhD
fuente
0

Encontré el mismo error hoy. Probé el botón "Borrar todos los gráficos", pero me estaba dando el mismo error. Entonces este truco funcionó para mí. Intenta aumentar el área de la trama arrastrando. Seguro que te ayudará.

Dhruv Panchal
fuente
0

Acabo de usar Clear all plots y luego nuevamente doy el comando plot y fue útil

Nirmal Kumar
fuente
1
Bienvenido a SO. Por favor, ¿puede explicar por qué esta es la respuesta?
Mike Poole
0

Si el margen es bajo, siempre es mejor comenzar con un nuevo dispositivo de trazado:

dev.new()
# plot()
# save your plot
dev.off()

Nunca obtendrá un error de margen, a menos que grafique algo grande que no se pueda acomodar.

Neeraj
fuente