vectoriales rasterizadas imagenes gráficos entre diferencias r

rasterizadas - Producir una imagen de gráficos vectoriales(es decir, metarchivo) en R adecuada para imprimir en Word 2007



diferencias entre gráficos raster y gráficos vectoriales (5)

Como traté de producir png a alta resolución en R y no parecía funcionar en mi PC (si establecía una resolución superior a, por ejemplo, 300 ppp, R produciría un error como "no se puede iniciar el dispositivo png"), la forma que encontré fue guardar la figura usando postscript () y luego usar GSView para convertir el archivo ps a png con una resolución de 600 ppp. MS Word consume el png felizmente y la calidad de impresión parece ser perfecta.

Primero una advertencia: publiqué esta pregunta here en SuperUser, pero claramente es el lugar equivocado para hacer las preguntas R. Reconozco que no es directamente una cuestión de programación, pero creo que se puede resolver cambiando la forma en que se producen los gráficos (es decir, mediante la codificación adecuada). Así que espero que los lectores lo encuentren apropiado para el foro.

Los diagramas R generalmente consisten en elementos gráficos vectoriales (es decir, puntos, líneas, polígonos, texto). R le permite guardar su figura (o copiar y pegar) en varios formatos, incluidos varios formatos de trama, como un PDF o como un meta-archivo de Windows.

Por lo general, guardo mis imágenes en formato PDF e las imprimo. Esto renderiza las imágenes exactamente como las diseñé en papel, en la más alta calidad. Evito los formatos de trama (por ejemplo, JPG, TIFF) para imprimir, ya que inevitablemente la calidad es menor y los editores prefieren los formatos vectoriales.

Sin embargo, tengo que crear un gran documento de escritorio de varias páginas utilizando Microsoft Word 2007, y por lo tanto, el uso de archivos PDF no es una opción. Cuando importo mis figuras de los metaarchivos, o copio y pego directamente de R a Word, tanto la pantalla como la representación de impresión de la imagen cambian ligeramente (por ejemplo, los polígonos y sus rellenos se desalinean ligeramente).

Dado que quiero conservar una alta calidad de vector (y no utilizar formatos de trama), ¿qué puedo hacer para que los gráficos vectoriales R funcionen con Word? (Por supuesto, Sweave y LaTeX estarían bien, pero de nuevo, no es una opción realista).

Considera este ejemplo:

plot(c(1:100), c(1:100), pch=20) ## Copy and paste to Word 2007 as Windows metafile ## Print ## Quality is poorer (e.g. dot fills misaligned with borders) pdf("printsPerfectly.pdf") plot(c(1:100), c(1:100), pch=20) dev.off() ## Now print PDF ## Quality is as expected

EDITAR: A raíz de las sugerencias de @John lo presenté como un archivo de postscript EPS (ver a continuación), lo inserté como una imagen en Word. Debido a que finalmente se imprimirá desde un PDF creado desde Word, lo convertí a PDF usando la configuración predeterminada de Word 2007, lo imprimí en mi impresora láser HP Laserjet P1606dn y luego tomé una fotografía para ilustrar el problema de los bordes de los polígonos y llevé a la desalineación ( imagen a la izquierda, abajo). También lo produje directamente como PDF desde R usando pdf() e imprimí el PDF y tomé una fotografía (imagen a la derecha, abajo).

¡Puede parecer papas pequeñas! Pero cuando se ha tomado muchas molestias para lograr una alta calidad, es decepcionante verse frustrado al final. Además, no es realmente obvio aquí, pero los números no son tan de alta calidad (izquierda) como en el PDF (derecha), sin tener en cuenta las diferencias de enfoque en la fotografía.


El paquete devEMF parece producir gráficos que se ven mejor que el wmf predeterminado cuando se pegan en PowerPoint.


La mejor respuesta actual para mí no es aceptable, ya que si uno se toma la molestia de hacer una buena figura basada en vectores, lo último que le gustaría hacer es rastrizarla a un mapa de bits ... a menos que sea un gráfico increíblemente complejo eso lleva años para renderizarse en formato vectorial, o algo así, pero para la mayoría de los gráficos no es el caso.

De hecho, la mejor solución que he visto hasta ahora para hacer que los gráficos R (gráficos de base R, gráficos de retícula o ggplots) funcionen junto con Office (Word, Powerpoint) es exportarlos directamente a un Powerpoint utilizando el paquete ReporteRs , como en

library( ReporteRs ) require( ggplot2 ) mydoc = pptx( ) mydoc = addSlide( mydoc, slide.layout = "Title and Content" ) mydoc = addTitle( mydoc, "Plot examples" ) myplot = qplot(Sepal.Length, Petal.Length , data = iris, color = Species , size = Petal.Width, alpha = I(0.7) ) mydoc = addPlot( mydoc, function( ) print( myplot ), vector.graphic=TRUE) writeDoc( mydoc, file = "test plot.pptx" )

Esto da como resultado un gráfico de PowerPoint totalmente editable y de alta calidad en formato DrawingML basado en vectores nativos de Office, que también puede copiar y pegar fácilmente como metarchivo mejorado si lo desea (utilizando Copiar ... Pegar especial ... Metarchivo mejorado) y que, a diferencia de los campos electromagnéticos exportados desde R, también es totalmente compatible con la transparencia. Para la producción final también puede imprimirlo fácilmente en PDF desde Powerpoint si es necesario, y se mantendrá muy bien en formato vectorial.

Para su ejemplo simple, esto nos da:

library( ReporteRs ) mydoc = pptx( ) mydoc = addSlide( mydoc, slide.layout = "Title and Content" ) mydoc = addTitle( mydoc, "" ) myplot = function( ) {return(plot(c(1:100), c(1:100), pch=20))} mydoc = addPlot( mydoc, fun=myplot, vector.graphic=TRUE, offx=0,offy=0,width=12, height=8, fontname="Calibri", pointsize=20) writeDoc( mydoc, file = "test plot2.pptx" )

O amplíe para mostrar que es de buena calidad (y formato vectorial editable):

Importar el PDF de un gráfico R en Inkscape y luego exportarlo desde allí a un metarchivo mejorado también da como resultado mejores figuras de aspecto que cuando uno usa la exportación directa a EMF desde R (ya sea de forma nativa o usando devEMF ), pero no es tan bueno como la solución anterior, y todavía con errores.

La segunda mejor solución sería exportar a EMF usando el paquete R devEMF . En este caso, esto nos da

library(devEMF) emf(file="example.emf", bg="white", width=12, height=8, family="Calibri", pointsize=20) plot(c(1:100), c(1:100), pch=20) dev.off()

pero el renderizado en pantalla en powerpoint, por ejemplo, no es tan bueno, ya que representa sin suavizado (aquí se amplía para mostrar esto) y la transparencia tampoco es compatible:

Al hacer clic con el botón derecho en la imagen y seleccionar Desagrupar, se convierte al formato nativo DrawingML de Office, que luego se procesa como anti-alias, pero la ubicación de las etiquetas de texto se desordena un poco (se resuelve en este caso seleccionando y centrando todo el texto):

Entonces la solución que di más arriba es claramente mejor.

EDITAR: Ahora hice un [ export paquetes pequeños] con las funciones auxiliares graph2ppt y graph2doc para exportar el gráfico activo actualmente a Powerpoint o Word, así como table2doc , table2ppt y table2html para exportar el objeto R stats mostrado anteriormente a Word, Powerpoint o HTML tabla, por ejemplo:

install.packages("rJava") install.packages("ReporteRs") install.packages("ReporteRsjars") install.packages("ggplot2") install.packages("rtable") install.packages("xtable") install.packages("taRifx") install.packages("devtools") library(devtools) devtools::install_github(''tomwenseleers/export'',local=F) library(export) ?graph2ppt ?table2doc ## export of ggplot2 plot library(ggplot2) qplot(Sepal.Length, Petal.Length, data = iris, color = Species, size = Petal.Width, alpha = I(0.7)) graph2ppt(file="ggplot2 plot.pptx", aspectr=1.7) # add 2nd slide with same graph in different aspect ratio graph2ppt(file="ggplot2 plot.pptx", aspectr=1.3, append=T) # add 3d slide with same graph with fixed width & height graph2ppt(file="ggplot2 plot.pptx", width=6, height=5, append=T) # export of aov Anova output fit=aov(yield ~ block + N * P + K, npk) summary(fit) table2doc(file="table_aov.docx") summary(fit) table2doc(file="table_aov.docx",append=T,digits=4) summary(fit) table2doc(file="table_aov.docx",append=T,digits=4,digitspvals=1) summary(fit) table2html(file="table_aov.html")

Si alguien encuentra algún error allí, ¡hágamelo saber!


Mi solución preferida es usar el metarchivo de Windows para trazar, por ejemplo:

win.metafile("mygraph.wmf") print(gg1) dev.off()

Esto produce un archivo * .wmf que se puede copiar y pegar en el archivo de palabras.


Su única opción es usar gráficos ráster de alta resolución. Una vez que tenga más de 300 ppp, será completamente indistinguible del vector impreso; simplemente creará archivos más grandes. Su método de copiar y pegar está llegando a 72 ppp y se verá terrible. Si importa desde un archivo, puede obtener la resolución en el archivo y las cosas serán mucho mejores. Afortunadamente, se supone que Office 2007 maneja imágenes png, que tienen la mejor compresión para gráficos típicos. Digamos que querías la imagen de 4 "de ancho y 6" de alto ...

png(''printsGreat.png'', width = 4, height = 6, units = ''in'', res = 300) plot(c(1:100), c(1:100), pch=20) dev.off()

Además, se supone que Office 2007 puede manejar archivos EPS y los archivos R postscript son compatibles por defecto EPS cuando imprime una página.

postscript("printsPerfectly.eps", width = 4, height = 6, horizontal = FALSE, onefile = FALSE) plot(c(1:100), c(1:100), pch=20) dev.off()

Pero si no tienes suerte con ellos vuelve a la imagen de alta resolución.