2009-07-22 25 views
5

Tengo un histograma con varios cientos de elementos, para lo cual hago una gráfica Q-Q. Esto resulta en EPS de 2.5 megabytes de tamaño. Esto es demasiado para una figura que solo se incluirá en una publicación y no se verá con un aumento de 100x.Reducir el tamaño de las parcelas en formato EPS

¿Hay alguna opción en R para producir de alguna manera EPS más pequeños? He buscado documentos en vano. ¿O es mi mejor opción, por ejemplo, rasterizarla después a 300 ppp? Si ese es el caso, ¿alguna recomendación para la herramienta para este trabajo?

El código R para la trama es muy sofisticado:

postscript(filename) 
qqnorm(n, main=title)) 
qqline(n) 
dev.off() 

EDIT: Doh! Mi pregunta menciona salida de EPS, y luego convertirlo a algún formato de trama. Cuando, por supuesto, podía generar PNG en primer lugar desde R.

Respuesta

3

I' Sólo intenté varias cosas que no funcionaron, las incluyo aquí para salvar a otras que pierden el tiempo. Como referencia, configuro n <- rnorm(1e5) en su código anterior.

cosas que no funcionan:

  1. Configuración colormodel <- "gray".

  2. Utilizando un valor diferente de pch. (Algunos otros valores aumentan el tamaño del archivo, pero he encontrado ninguno que disminuirlo.)

  3. Configuración useKerning = FALSE.

  4. Cambio de la configuración de ancho y alto.

  5. Usando PDF en lugar de PostScript.

  6. Uso CarioPS del paquete Cairo.

A la luz de esto, creo que es poco probable que pueda disminuir el tamaño del archivo con un formato vectorial. Esto significa que tendrá que usar un formato de trama (muy probablemente PNG).

1

Bueno, EPS solo contiene instrucciones para dibujar el gráfico, por lo que su tamaño dependería en gran medida de la cantidad de puntos de datos que tenga. Es probable que sea más pequeño en un PDF donde se utiliza la compresión, pero la mejor opción es usar un formato de ráster, que puede ser más pequeño que eso.

Sospecho que el EPS R genera ya es tan pequeño como se puede obtener (estoy seguro de que tienen una función propia en Postscript para manejar el trazado de los datos con un nombre de charla, etc. ya que es bastante común práctica). Dudo que haya muchas formas de optimizar eso. Sin embargo, podría estar equivocado, pero lo más probable es que R sea el único programa que tenga suficiente información de alto nivel para comprimir razonablemente la salida.

+0

PDF resultados en un archivo de tamaño de 1 mb, aún demasiado grande. Supongo que podría aplicar el muestreo de conjuntos de datos para reducir el número de puntos, pero luego es difícil no perder algunos puntos atípicos interesantes. –

3

Tiene tres opciones.

  1. aceptar el tamaño de archivo grande
  2. guardar el archivo en un formato de no vectorial como PNG
  3. Cree el QQplot en una muestra aleatoria de los datos. Una muestra aleatoria de algunos cientos de puntos debería dar una QQplot similar.

    postscript (nombre de archivo) Samp < - muestra (n, tamaño = 200) qqnorm (Samp, principal = título)) qqline (Samp) dev.off()

2

En esta discusión en la lista R link text me enteré de pdftk. Con n= 1e5 se redujo el tamaño del pdf de 6mb a 600k. ¡Con buena pinta!

2

en la vista GS, convierta nuestros archivos a pdf, luego conviértelos a PS o EPS nuevamente, el tamaño del archivo final se reduce 5-7 veces.

+0

¿podría proporcionar una línea de código bash para hacer esto? – toxicate20

1

El OP resolvió el problema generando un archivo PNG directamente. Tuve que usar EPS porque PNG y otros formatos alias la imagen. Tendría que convertir a EPS de todos modos para incluirlo en un archivo LaTeX.

Utilicé GIMP para importar el archivo de 10 MB eps generado a partir de la función de imagen R. Luego rotó, aplanó y guardó como un archivo de 300KB eps. El aplanamiento fusiona todas las capas en una sola capa y elimina el canal alfa para la transparencia. Manejado fácilmente por LaTeX después de esta transformación.

Antes de la transformación, la imagen se procesaba muy lentamente en Ghost Script y no se podía representar en absoluto en epsviewer. GIMP utiliza Ghost Script como interfaz, por lo que la importación es lenta, pero, una vez importada, todo el procesamiento y la representación fue muy rápido.

Cuestiones relacionadas