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)

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)

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!


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í


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() 

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.


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.


Esto lo hizo por mí (usando png()/ dev.off()en Rstudio).
knowah


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.



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 ...


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)
    ```

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á.


0

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


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.