2011-08-24 14 views
7

Estoy usando JRI para generar gráficos ggplot2 de Java. Actualmente tengo que escribir parcelas en el disco. ¿Cómo hago esto sin pasar por los archivos, es decir, simplemente renderizando las tramas en la memoria?En R, ¿cómo trazar en un búfer de memoria en lugar de un archivo?

He intentado utilizar el paquete Cairo para trazar una conexión de texto, pero eso no funciona sin el "parche de conexiones R", que después de algunos resultados en Google resulta ser una historia antigua.

+0

yo sepa, esto no es posible todavía. Es una característica que se solicita periódicamente, aunque creo que requiere una revisión sustancial del código de conexión de R, por lo que no se ha realizado hasta el momento. –

+0

Sí, de hecho, el gráfico de conexiones R es historia (lo escribí). Sin embargo, he escuchado algunos informes interesantes del uso de este año que alguien puede intentar y colarse en una pequeña apertura a la interfaz de conexiones. – Jeff

+1

Además, hay una forma no documentada de obtener los datos de imagen en bruto de un dispositivo de El Cairo. Es solo que alguien necesita escribir un convertidor para eso, ya sea png, jpeg, tiff, etc. Tendrás que leer el código fuente, pero busca la función .image en el paquete Cairo en rforge.net – Jeff

Respuesta

10

Principalmente desde https://stat.ethz.ch/pipermail/r-devel/2010-August/058253.html.

library(Cairo) 
library(png) 
library(ggplot2) 

Cairo(file='/dev/null') 

qplot(rnorm(5000)) # your plot 

# hidden stuff in Cairo 
i = Cairo:::.image(dev.cur()) 
r = Cairo:::.ptr.to.raw(i$ref, 0, i$width * i$height * 4) 
dim(r) = c(4, i$width, i$height) # RGBA planes 
# have to swap the red & blue components for some reason 
r[c(1,3),,] = r[c(3,1),,] 
# now use the png library 
p = writePNG(r, raw()) # raw PNG bytes 

[Actualización:. JRI puede manejar sin refinar, sólo tiene que utilizar las abstracciones REngine y no los JRI]

+0

Yang, ¡esto es fantástico! ¡No tenía idea de que Simon hubiera escrito un paquete así! Gracias por la respuesta. – Jeff

+0

Buen trabajo. ¿Sabes si hay un PDF equivalente a este método @Yang? – geotheory

+0

@gottheory por favor plantee una pregunta y publicaré esta solución https://www.andrewheiss.com/blog/2016/12/08/save-base-graphics-as-pseudo-objects-in-r/ desafortunadamente ' png (NULL) 'no funciona. – Hedgehog

Cuestiones relacionadas