2

关于密度 2d 背后的原理,我有一个更普遍的问题。我正在使用 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()

看起来像这样: 在此处输入图像描述

有些区域有密度估计但没有数据(大约 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()

看起来像这样: 在此处输入图像描述

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

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

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

4

1 回答 1

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))

在此处输入图像描述

于 2014-11-16T04:26:11.883 回答