等高线图:具有纬度和经度位置的站点密度
Contour plot: density of sites with latitude and longitude locations
我有这种格式的数据,想做等高线图。当我尝试使用 density(z)
时,我收到错误消息 "x must be numeric"
。我不确定如何转换我的数据以使其成为生成轮廓的正确格式。我只是希望它基于点的密度,因为两列代表我的 long/lat.
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)
density()
用于单变量密度估计。由于您有两个自变量:long
和 lat
,您应该使用 R 的默认包 MASS
.
中的 kde2d()
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
,这将为您提供 25 * 25 的网格。密度估计是在这个网格上完成的。也许您想知道为什么要在规则网格上进行估计。因为这样的网格就像数码照片的像素。 Grid/raster like对象方便可视化。实际上,如果你想让计算机进行3D图形,你必须给它一个类似对象的光栅。
在实践中,你应该根据你有多少数据来选择n
。请注意,一个 25 * 25 的网格有 625 个单元格,当您有 1000 个数据点时,这是相当公平的。您也可以尝试 n = 50
。设置 n
与生成直方图时设置 bin 数非常相似。随着 n
的增加,您得到的估计更加参差不齐。不清楚的可以考虑直方图的例子:
x <- rnorm(200)
hist(x, breaks = 10)
hist(x, breaks = 20)
准确的说,密度估计不同于直方图;前者是内核平滑器,而后者是原始 bin 平滑器。但是选择n
(细化)确实有同样的效果。
我有这种格式的数据,想做等高线图。当我尝试使用 density(z)
时,我收到错误消息 "x must be numeric"
。我不确定如何转换我的数据以使其成为生成轮廓的正确格式。我只是希望它基于点的密度,因为两列代表我的 long/lat.
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)
density()
用于单变量密度估计。由于您有两个自变量:long
和 lat
,您应该使用 R 的默认包 MASS
.
kde2d()
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
,这将为您提供 25 * 25 的网格。密度估计是在这个网格上完成的。也许您想知道为什么要在规则网格上进行估计。因为这样的网格就像数码照片的像素。 Grid/raster like对象方便可视化。实际上,如果你想让计算机进行3D图形,你必须给它一个类似对象的光栅。
在实践中,你应该根据你有多少数据来选择n
。请注意,一个 25 * 25 的网格有 625 个单元格,当您有 1000 个数据点时,这是相当公平的。您也可以尝试 n = 50
。设置 n
与生成直方图时设置 bin 数非常相似。随着 n
的增加,您得到的估计更加参差不齐。不清楚的可以考虑直方图的例子:
x <- rnorm(200)
hist(x, breaks = 10)
hist(x, breaks = 20)
准确的说,密度估计不同于直方图;前者是内核平滑器,而后者是原始 bin 平滑器。但是选择n
(细化)确实有同样的效果。