2011-08-24 9 views
7

私はJavaからggplot2プロットを生成するためにJRIを使用しています。現在私はディスクにプロットを書く必要があります。ファイルを通過せずに、つまりメモリ内のプロットをレンダリングするだけで、これを行うにはどうすればよいですか?Rではファイルの代わりにメモリバッファにプロットする方法は?

私はtextConnectionにプロットするためにCairoパッケージを使用しようとしましたが、いくつかのグーグルが古代の歴史であることが判明した後、 "R Connections Patch"なしでは動作しません。

+0

私の知る限り、これはまだ不可能です。定期的に要求される機能ですが、Rの接続コードを大幅に改造する必要があると考えられています。したがって、これまで行われていません。 –

+0

確かに、R接続プロットは履歴です(私はそれを書いた)。しかし、私は今年のuseRから興味深い報告を聞いたことがあります。誰かが接続インターフェースへの小さな入り口に潜入しようとするかもしれません。 – Jeff

+1

また、Cairoデバイスからの生の画像データを取得するための文書化されていない方法もあります。誰かがpng、jpeg、tiffなどのようにコンバーターを書く必要があるだけです。ソースコードを読む必要がありますが、rforge.netのCairoパッケージの.image関数をスコープしてください。 – Jeff

答えて

10

大部分は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 

は、[更新:JRI のRAWを扱うことができる、あなただけのREngineの抽象化ではなく日本総研のものを使用する必要があります]

+0

ヤン、これは素晴らしいです!私はサイモンがそのようなパッケージを書いたのかどうか分からなかった!答えをありがとう。 – Jeff

+0

いい仕事です。このメソッドに相当するPDFがあるかどうか知っていますか? – geotheory

+0

@gottheory質問をしてください。私はこの解決策を投稿します。https://www.andrewheiss.com/blog/2016/12/08/save-base-graphics-as-pseudo-objects-in-r/残念ながら、 png(NULL) 'が機能しません。 – Hedgehog

関連する問題