如何在R中创建2D散射数据的连续密度热图?

Yan*_*ang 22 r ggplot2

我可以生成一维数据的密度图:

qplot(mydatapoints, geom='density')
Run Code Online (Sandbox Code Playgroud)

我也看过很多热图网格的例子,但这些更类似于1D数据的直方图,因为数据进入离散桶而不是显示平滑曲线.

我可以绘制类似于1D密度的东西,但是对于2D数据,可以用(例如)色调/饱和度/亮度来表示密度吗?

Ben*_*ker 29

我想你想要一个2D密度估计,它是kde2dMASS包中实现的.

df <- data.frame(x=rnorm(10000),y=rnorm(10000))
Run Code Online (Sandbox Code Playgroud)

通过MASS和基地R:

k <- with(df,MASS:::kde2d(x,y))
filled.contour(k)
Run Code Online (Sandbox Code Playgroud)

通过ggplot(geom_density2d()电话kde2d())

library(ggplot2)
ggplot(df,aes(x=x,y=y))+geom_density2d()
Run Code Online (Sandbox Code Playgroud)

我觉得filled.contour更有吸引力,但是如果你想要修改任何东西,那就layout太麻烦了,因为它使用并接管了页面布局.以Brian Diggs的答案为基础,填充轮廓之间的颜色:这里是不同alpha级别的等效物,添加透明点进行比较.

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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Bri*_*ggs 9

结合另外两个答案(一个指向geom_density2d和一个给出样本数据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")
Run Code Online (Sandbox Code Playgroud)