关于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()
看起来像这样:
有些区域有密度估算但没有数据(大约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 (not density heatmap)
但是找不到令人满意的答案。
所以我的问题是(i)为什么? (ii)如果可能,如何避免/调整?
答案 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))