web-dev-qa-db-ja.com

Rで2D散布データの連続密度ヒートマップを作成するにはどうすればよいですか?

1Dデータの密度プロットを生成できます:

qplot(mydatapoints, geom='density')

ヒートマップグリッドの例もたくさん見ましたが、これらは1Dデータのヒストグラムに似ており、データは滑らかな曲線を示すのではなく、個別のバケットに入ります。

1D密度に似ているが、密度を表すために色相/彩度/明度などの2Dデータのプロットを作成できますか?

22
Yang

MASSパッケージの_kde2d_によって実装される2D密度推定が必要だと思います。

_df <- data.frame(x=rnorm(10000),y=rnorm(10000))
_

MASSとベースR:

_k <- with(df,MASS:::kde2d(x,y))
filled.contour(k)
_

ggplot経由(geom_density2d()kde2d()を呼び出します)

_library(ggplot2)
ggplot(df,aes(x=x,y=y))+geom_density2d()
_

私は_filled.contour_の方が魅力的だと思いますが、layoutを使用してページレイアウトを引き継ぐため、何かを変更したい場合は、作業が大変です。等高線の間の色を塗りつぶすブライアンディッグスの答えに基づいて構築します。これは、比較のために透明な点が追加された、異なるアルファレベルの同等のものです。

_ggplot(df,aes(x=x,y=y))+
  stat_density2d(aes(alpha=..level..), geom="polygon") +
  scale_alpha_continuous(limits=c(0,0.2),breaks=seq(0,0.2,by=0.025))+
  geom_point(colour="red",alpha=0.02)+
  theme_bw()
_

enter image description here

29
Ben Bolker

他の2つの回答を組み合わせる(1つはgeom_density2dを指し、1つはサンプルデータとscale_colour_gradientを指す):

df <- data.frame(x=rnorm(10000),y=rnorm(10000))
ggplot(df,aes(x=x,y=y))+
    stat_density2d(aes(fill=..level..), geom="polygon") +
    scale_fill_gradient(low="blue", high="green")
9
Brian Diggs

scale_colour_gradient()もあります

df <- data.frame(x=rnorm(10000),y=rnorm(10000))
ggplot(df, aes(x,y,colour=y)) + geom_point() + scale_colour_gradient(low="blue",high="red")
1