2

連続する 4 日間 (約 340,000 データ ポイント) の毎秒の観測を含むデータセットがあります。これは、散布図で表示するには多すぎます。たとえば、2000 時点の均一なサンプルのみをプロットしたいと思います。

ggplot2の「グラフィックスの文法」アプローチでこれを達成することは可能ですか? 組み込みの「サンプリング」修飾子は見つかりませんでしたが、おそらく簡単に記述できますか?

library(ggplot2)

x <- 1:100000
d <- data.frame(x=x, y=rnorm(length(x)))
ggplot(d[sample(x, 2000), ], aes(x=x, y=y)) + geom_point()

これは、ggplot に渡されたデータを変更することで「ハッキング」される方法です。ただし、データを変更したくはありません。サンプルのみを含めるようにフィルター処理するだけです。

ggplot(d, aes(x=x, y=y)) + ??? + geom_point()

編集:私は、スムージングやビニングではなく、特にサンプリングを探しています。私が持っているデータは、特定のプロセスの 1 秒をシミュレートするのにかかる時間を示しています。シミュレーションは並列化されており、シミュレートされた秒ごとに、関連する各コア (合計 8​​) の実行時間が表示されます。生データ ポイントだけをプロットして、最適ではない負荷分散を示したいと考えています。サンプリングの理由は、散布図には 300,000 のデータ ポイントが多すぎるためです。プロットに時間がかかりすぎて、視覚化が適切ではありません。

4

2 に答える 2

3

geom_pointdata引数を使用して、呼び出しででサブセット化できます。

... + geom_point(data=d[sample(x,2000),])

このようにして、すべてのデータを使用して他のジオメトリを自由に追加できます。たとえば、サンプルデータを使用します。

ggplot(d, aes(x=x, y=y)) + geom_hex() + geom_point(data=d[sample(x,2000),])

hexbinとサンプルポイント

于 2012-10-02T08:16:20.793 に答える
3

ビッグデータの散布図を作成する場合は、いくつかのggplot2 オプションがあります

彼らはハドリーによるこのコースから来ています

# upload all images to imgur.com
opts_chunk$set(fig.width = 5, fig.height = 5, dev = "png")
render_markdown(strict = T)


# some autocorrelated data
set.seed(1)
x <- 1:1e+05
d <- data.frame(x = x)
d$y <- arima.sim(list(order = c(1, 1, 0), ar = 0.9), n = 1e+05 - 1)
# the basic plot 
base_plot <- ggplot(d, aes(x = x, y = y))

geom_bin2d

および変数binwidthに を設定できますxy

base_plot + geom_bin2d(binwidth = c(200, 5))

ここに画像の説明を入力

geom_hex

の数を設定できますbins

base_plot + geom_hex(bins = 200)

ここに画像の説明を入力

小さな点

オーバープロットを停止します

base_plot + geom_point(size = I("."))

ここに画像の説明を入力

スムーサーを使う

これは、クラッシュしたり時間がかかりすぎたりすることなく、必要な詳細を取得できるスムージング方法を使用することに依存しています. この場合、ノットの数は試行錯誤によって選択されました (さらに詳細が必要になる場合もあります)。

library(mgcv)
base_plot + stat_smooth(method = "gam", formula = y ~ s(x, k = 50))

ここに画像の説明を入力

于 2012-10-02T06:28:14.850 に答える