我可以生成一维数据的密度图:
qplot(mydatapoints, geom='density')
Run Code Online (Sandbox Code Playgroud)
我也看过很多热图网格的例子,但这些更类似于1D数据的直方图,因为数据进入离散桶而不是显示平滑曲线.
我可以绘制类似于1D密度的东西,但是对于2D数据,可以用(例如)色调/饱和度/亮度来表示密度吗?
Ben*_*ker 29
我想你想要一个2D密度估计,它是kde2d
在MASS
包中实现的.
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)
结合另外两个答案(一个指向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)