2011-08-24 24 views
7

Używam JRI do generowania wykresów ggplot2 z Java. Obecnie muszę zapisywać wątki na dysku. Jak to zrobić bez przechodzenia przez pliki, czyli renderowania wykresów w pamięci?W R, jak wykreślić w buforze pamięci zamiast pliku?

Próbowałem użyć pakietu Cairo do wykreślenia na łączu tekstowym, ale to nie działa bez "Patchu Connections R", który po niektórych Googlingach okazuje się być historią starożytną.

+0

AFAIK, nie jest to jeszcze możliwe. Jest to funkcja, która jest okresowo pobierana, chociaż uważam, że wymaga ona znacznej zmiany kodu połączenia R, dlatego nie została wykonana do tej pory. –

+0

Tak, rzeczywiście, fabuła połączeń R jest historią (napisałem ją). Jednak słyszałem kilka interesujących raportów z tegorocznego wykorzystania, że ​​ktoś może spróbować wkraść się w maleńkie otwarcie do interfejsu połączeń. – Jeff

+1

Istnieje również nieudokumentowany sposób uzyskania danych obrazu surowego z urządzenia Cairo. Chodzi o to, że ktoś musi napisać dla niego konwerter, czy to png, jpeg, tiff, itp. Będziesz musiał przeczytać kod źródłowy, ale zasięgnąć funkcji .image w pakiecie Cairo na rforge.net – Jeff

Odpowiedz

10

Głównie z 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 

[Aktualizacja:. JRI może obsłużyć raws, wystarczy użyć abstrakcje REngine a nie te JRI]

+0

Yang, to jest fantastyczne! Nie miałem pojęcia, że ​​Simon napisał taką paczkę! Dziękuję za odpowiedź. – Jeff

+0

Dobra robota. Czy wiesz, czy istnieje odpowiednik PDF tej metody @ Yang? – geotheory

+0

@gottheory proszę podać pytanie, a ja opublikuję to rozwiązanie https://www.andrewheiss.com/blog/2016/12/08/save-base-graphics-as-pseudo-objects-in-r/ niestety ' png (NULL) 'nie działa. – Hedgehog

Powiązane problemy