计算密度估计密度2d?

时间:2014-11-14 14:02:29

标签: r ggplot2 polygon heatmap kernel-density

关于density2d背后的原理,我有一个更普遍的问题。 我正在使用ggplot和density2d函数来显示动物的运动。我的想法是计算热图,显示动物大多数时间的位置和/或确定特别感兴趣的区域。然而,density2d函数有时会产生相当难以理解的图。

这就是我的意思:

set.seed(4)
x<-runif(50,1,599)
y<-runif(50,1,599)
df<-data.table(x,y)

ggplot(df,aes(x=x,y=y))
+stat_density2d(aes(x=x,y=y,fill=..level..,alpha=..level..),bins=50,geom="polygon")
+coord_equal(xlim=c(0,600),ylim=c(0,600))
+expand_limits(x=c(0,600),y=c(0,600))
+geom_path()

看起来像这样: enter image description here

有些区域有密度估算但没有数据(大约x:50,y:300)。

现在与此比较:

set.seed(13)
x<-runif(50,1,599)
y<-runif(50,1,599)
df<-data.table(x,y)

ggplot(df,aes(x=x,y=y))
+stat_density2d(aes(x=x,y=y,fill=..level..,alpha=..level..),bins=50,geom="polygon")
+coord_equal(xlim=c(0,600),ylim=c(0,600))
+expand_limits(x=c(0,600),y=c(0,600))
+geom_path()

看起来像这样: enter image description here

这里有一些区域“没有”密度估计但是有实际数据(大约x:100,y:550)。

有人问了一个相关的问题:
Create heatmap with distribution of attribute values in R (not density heatmap)
但是找不到令人满意的答案。

所以我的问题是(i)为什么? (ii)如果可能,如何避免/调整?

1 个答案:

答案 0 :(得分:0)

这可能会有所帮助。我对stat_density2d并不熟悉。在看到您的代码和ggplot文档(http://docs.ggplot2.org/0.9.2.1/stat_density2d.html)后,我认为..level..可能不是那个。然后,我尝试..density..有人能够解释为什么你需要密度,同时我认为这是你想要的图。

ggplot(data = df, aes(x = x, y = y)) +
stat_density2d(geom="tile", aes(fill = ..density..), contour = FALSE) +
geom_path() +
coord_equal(xlim=c(0,600),ylim=c(0,600)) +
expand_limits(x=c(0,600),y=c(0,600))

enter image description here