我有这种格式的数据,想要制作等高线图。当我尝试使用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)
答案 0 :(得分:2)
long
用于单变量密度估算。由于您有两个独立变量:lat
和kde2d()
,因此您应该使用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
<强>后续强>
如果你看Usage:
kde2d(x, y, h, n = 25, lims = c(range(x), range(y)))
:
x
每个y
和n = 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
(细化)的选择确实具有相同的效果。