等高线图:具有纬度和经度位置的站点密度

时间:2016-06-18 17:29:12

标签: r plot contour kernel-density

我有这种格式的数据,想要制作等高线图。当我尝试使用density(z)时收到错误消息"x must be numeric"。我不确定如何转换数据以使其成为生成轮廓的正确格式。我只是希望它基于点的密度,因为两列代表我的长/纬度。

z <- c(
  c(8.83,8.89),
  c(8.89,8.94),
  c(8.84,8.9),
  c(8.79,8.852),
  c(8.79,8.88),
  c(8.8,8.82),
  c(8.75,8.78),
  c(8.8,8.8),
  c(8.74,8.81),
  c(8.89,8.99),
  c(8.97,8.97),
  c(9.04,9.08),
  c(9,9.01),
  c(8.99,8.99),
  c(8.93,8.97)
)
z <- matrix(z, ncol = 2, byrow = TRUE)

1 个答案:

答案 0 :(得分:2)

long用于单变量密度估算。由于您有两个独立变量:latkde2d(),因此您应该使用R的默认包MASS中的library(MASS) fit <- kde2d(z[,1], z[,2]) contour(fit$x, fit$y, fit$z) ## show original data locations points(z, pch = 19, col = 4)

?kde2d

contour

<强>后续

如果你看Usage: kde2d(x, y, h, n = 25, lims = c(range(x), range(y)))

x

每个yn = 25的默认单元格数为n,可为您提供25 * 25网格。密度估计在此网格上完成。也许您想知道为什么在常规网格上进行估算。因为这样的网格就像数码照片的像素。网格/栅格类对象便于可视化。实际上,如果你想让计算机继续3D图形,你必须给它一个像对象一样的光栅。

在实践中,您应根据您拥有的数据选择n = 50。请注意,25 * 25网格有625个单元格,当你有1000个数据点时,这是相当公平的。您也可以尝试n。设置n与生成直方图时设置二进制数非常相似。当x <- rnorm(200) hist(x, breaks = 10) hist(x, breaks = 20) 增加时,您得出的估算值会更加锯齿。如果您不清楚,请考虑直方图示例:

n

准确地说,密度估计与直方图不同;前者是内核更平滑,而后者是原始bin更平滑。但是Authentication(细化)的选择确实具有相同的效果。