plot()
100万を超えるデータポイントに使用していますが、非常に遅いことがわかりました。
プログラミングやハードウェア ソリューション (より多くの RAM、グラフィック カードなど) を含め、速度を改善する方法はありますか?
プロットのデータはどこに保存されますか?
(この質問はScatterplot with too many points と密接に関連していますが、その質問はパフォーマンスの問題ではなく、大きな散布図で何かを見ることの難しさに焦点を当てています...)
hexbinプロットは実際に何かを示します(@Rolandがコメントで提案している散布図とは異なり、これは単に巨大で遅いブロブである可能性が高いです)、あなたの例では私のマシンで約3.5秒かかります:
set.seed(101)
a<-rnorm(1E7,1,1)
b<-rnorm(1E7,1,1)
library(hexbin)
system.time(plot(hexbin(a,b))) ## 0.5 seconds, modern laptop
もう 1 つの少し遅い代替手段は、base-RsmoothScatter
関数です。これは、滑らかな密度に加えて、要求された数の極値 (この場合は 1000) をプロットします。
system.time(smoothScatter(a,b,cex=4,nr=1000)) ## 3.3 seconds
tabplot パッケージを見ましたか。これは大規模なデータ用に特別に設計されています http://cran.r-project.org/web/packages/tabplot/私は hexbin (またはオーバープロット用のデフォルトのヒマワリ プロット) を使用するよりも高速です。
また、Hadley が DS のブログでビッグデータ用に ggplot を変更する何かを書いたと思います。
"""私は現在、別の学生である Yue Hu と協力して、研究を堅牢な R パッケージに変えています。""" 2011 年 10 月 21 日
更新された ggplot3 の準備ができているかどうか、Hadley に尋ねることができるかもしれません。
ここでは触れていませんが、高解像度のラスター イメージにプロットすることも合理的な選択です (本当に巨大なブロブをプロットしたい場合:-))。作成には非常に時間がかかりますが、結果の画像は妥当なサイズになり、すぐに開きます。PNGは隣接するピクセルの類似性に基づいてファイルを圧縮するため、ブロブの外側 (すべて白) と内側 (すべて黒) は、解像度が大きくなってもストレージ スペースを必要としません。レンダリングするだけです。ブロブのエッジをより詳細に。
set.seed(101)
a<-rnorm(1E7,1,1)
b<-rnorm(1E7,1,1)
png("blob.png",width=1000,height=1000)
system.time(plot(a,b)) ## 170 seconds on an old Macbook Pro
dev.off()
結果の画像ファイルは 123K で、レンダリング サイズ (ファイルの作成時と開くときの両方) とファイル サイズを少し増やすだけで、はるかに高い解像度にすることができます。