2010-11-24 18 views
9

Estoy guardando un diagrama faceted ggplot2 que funciona bien para ahorrar en un tamaño más pequeño, pero falla cuando quiero aumentarlo.ggsave png error con tamaño más grande

> ggsave("tst.png",height=6.75,width=9) 
# works fine 

> ggsave("tst.png",height=9,width=12) 
Error in grDevices::png(..., width = width, height = height, res = dpi, : 
    unable to start device 
In addition: Warning messages: 
1: In grDevices::png(..., width = width, height = height, res = dpi, : 
    Unable to allocate bitmap 
2: In grDevices::png(..., width = width, height = height, res = dpi, : 
    opening device failed 

He salvado PNGs de este tamaño antes con ggsave, cualquier idea por qué no su trabajo?

ejemplo reproducible:

library(car) 
qplot(education,data=Vocab,geom="density",colour=sex)+facet_wrap(~year) 
+0

¿Te ayuda si reinicias R? ¿Qué hay de cambiar el nombre del archivo a '" /tmp/a.png "'? –

+0

No, ejecutar 'gc()', reiniciar o guardar con un nombre diferente no funciona. – James

+2

No se puede reproducir en Windows Vista y R 2.11.1 con los ejemplos de los archivos de ayuda. Parece un problema relacionado con su computadora o el gráfico. ¿Es posible obtener un ejemplo reproducible? –

Respuesta

10

NOTA: El uso de R 2.12.1 en Windows 7 de 64 bits, este problema ha desaparecido. Si se encuentra con este problema, primero intente actualizar su versión R.

Después de que surgió nuevamente el problema en otra pregunta, rehice mi código de prueba en mi nuevo sistema para ver si el error había desaparecido, y lo es.


EDIT: El truco qué código subyacente podría trabajar es el hecho de que utiliza una resolución de sólo 72 ppp y 300 ppp como no es el estándar en ggsave() creo.

así que ggsave("tst.png",height=9,width=12,dpi=72) podría hacer el truco.

Pero realmente debes tener una trama loca si no puede soportarlo. Por lo que puedo adivinar, el problema está relacionado con la tarjeta gráfica (como se deriva de this message from prof. Ripley).

Si la resolución es un problema, mejor puede ir a formatos vectorizados como eps o pdf.


EDIT 2:

Al parecer, hay un error en alguna parte que implica algún tipo de pérdida de memoria, tal vez? Dé el siguiente código:

library(car) 
library(ggplot2) 
qplot(education,data=Vocab,geom="density",colour=sex)+facet_wrap(~year) 
setwd("G:/Temp") 
i<-1 
while(1){ 
    tryCatch(ggsave("tst.png",height=9+i,width=12+i),error=function(e) {print(i);stop(e);}) 
    i <- i+1 
} 

Esto funciona bien para mí hasta que llego aproximadamente a las 9, entonces obtengo el error que obtiene. Cada próximo intento de ejecutar el código, comenzando de nuevo con i=1, arroja el mismo error. Probar con png() y dev.off() da nuevamente el mismo error. Parece que hay una parte de la memoria que se está llenando y que no está vacía, lo que impide que se guarde otro archivo .png. también para mí gc() no hice nada. Incluso cerrar R y volver a abrir no funcionó.

Se "resuelve" usando ggsave("tst.pdf"), pero la falla persiste. Informaría al equipo R.

+0

Gracias Joris, he incluido un ejemplo ahora. Me las arreglé para que funcionara por 7.5x10 y esto permitió suficiente espacio para que las etiquetas se impriman correctamente. Supongo que probablemente sea un problema de tarjeta gráfica, pero aún es un poco pequeño para eso. – James

+0

Todavía consigo el problema usando R 2.15.2 32-bit. Puedo "resolver" el problema reiniciando mi computadora y solo cargando R up.Sospecho que esto es, por lo tanto, un problema de espacio de direcciones de memoria lógica, es decir, el sistema operativo no puede dar a R suficiente memoria contigua para crear la imagen. – James

+0

Lo intenté de nuevo en mi sistema usando R 3.0.2, pero no puedo reproducir. Volví a cambiar mi código y puedo dejar que llegue a 38, cuyas dimensiones son demasiado grandes (50 pulgadas es demasiado para el dispositivo). Si vuelvo a ejecutar mi código de ejemplo, vuelve a hacer lo mismo: ejecute hasta que llegue a 38, y pare con el mismo error. Así que supongo que el problema no es R (también estoy ejecutando 32 bits). –

Cuestiones relacionadas