27

plot()100万を超えるデータポイントに使用していますが、非常に遅いことがわかりました。

プログラミングやハードウェア ソリューション (より多くの RAM、グラフィック カードなど) を含め、速度を改善する方法はありますか?

プロットのデータはどこに保存されますか?

4

5 に答える 5

27

(この質問は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

ここに画像の説明を入力

于 2012-06-08T10:11:36.583 に答える
2

tabplot パッケージを見ましたか。これは大規模なデータ用に特別に設計されています http://cran.r-project.org/web/packages/tabplot/私は hexbin (またはオーバープロット用のデフォルトのヒマワリ プロット) を使用するよりも高速です。

また、Hadley が DS のブログでビッグデータ用に ggplot を変更する何かを書いたと思います

"""私は現在、別の学生である Yue Hu と協力して、研究を堅牢な R パッケージに変えています。""" 2011 年 10 月 21 日

更新された ggplot3 の準備ができているかどうか、Hadley に尋ねることができるかもしれません。

于 2012-06-08T11:32:48.130 に答える
0

ここでは触れていませんが、高解像度のラスター イメージにプロットすることも合理的な選択です (本当に巨大なブロブをプロットしたい場合:-))。作成には非常に時間がかかりますが、結果の画像は妥当なサイズになり、すぐに開きます。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 で、レンダリング サイズ (ファイルの作成時と開くときの両方) とファイル サイズを少し増やすだけで、はるかに高い解像度にすることができます。

ここに画像の説明を入力

于 2019-08-09T22:12:11.033 に答える