R 点数据集到栅格数据集的平均值

R 点数据集到栅格数据集的平均值,r,ggplot2,automap,spatial-interpolation,R,Ggplot2,Automap,Spatial Interpolation,我对ggplot比较陌生,所以如果我的一些问题真的很简单或者根本无法解决,请原谅我 我想做的是生成一个填充形状是连续的国家的“热图”。此外,我的国家形状为.RData。我曾经将空间多边形数据转换为数据帧。我的数据帧的long和lat数据现在如下所示 head(my_df) long lat group 6.527187 51.87055 0.1 6.531768 51.87206 0.1 6.541202 51.87656 0.

我对ggplot比较陌生,所以如果我的一些问题真的很简单或者根本无法解决,请原谅我

我想做的是生成一个填充形状是连续的国家的“热图”。此外,我的国家形状为
.RData
。我曾经将空间多边形数据转换为数据帧。我的数据帧的long和lat数据现在如下所示

head(my_df)
long        lat         group
6.527187    51.87055    0.1 
6.531768    51.87206    0.1
6.541202    51.87656    0.1
6.553331    51.88271    0.1
my_fixed_points
long        lat         value
12.817      48.917      0.04 
8.533       52.017      0.034
8.683       50.117      0.02
7.217       49.483      0.0542
这一长/纬度数据勾勒出了德国的轮廓。这里省略了数据帧的其余部分,因为我认为不需要它。我还有一个第二个数据框,用于某些长/纬度点的值。这看起来像这样

head(my_df)
long        lat         group
6.527187    51.87055    0.1 
6.531768    51.87206    0.1
6.541202    51.87656    0.1
6.553331    51.88271    0.1
my_fixed_points
long        lat         value
12.817      48.917      0.04 
8.533       52.017      0.034
8.683       50.117      0.02
7.217       49.483      0.0542
我现在想做的是,根据位于该点一定距离内的所有固定点的平均值对地图上的每个点进行着色。这样我就可以(几乎)连续地给整个国家的地图着色。 到目前为止,我所拥有的是用ggplot2绘制的国家地图

ggplot(my_df,aes(long,lat)) + geom_polygon(aes(group=group), fill="white") + 
geom_path(color="white",aes(group=group)) + coord_equal()
我的第一个想法是生成位于已绘制地图内的点,然后计算每个生成点的值

value_vector <- subset(my_fixed_points, 
  spDistsN1(cbind(my_fixed_points$long, my_fixed_points$lat),  
  c(my_generated_point$long, my_generated_point$lat), longlat=TRUE) < 50, 
  select = value)
point_value <- mean(value_vector)

value\u vector我想你想要的是这样的东西。我预测,对于大型数据集,这种自制软件的效率会非常低,但它只适用于一个小的示例数据集。我会研究内核密度,也许还有
光栅
包。但也许这很适合你

下面的代码片段计算覆盖原始点数据集的点栅格的镉浓度平均值。仅考虑小于1000 m的点

library(sp)
library(ggplot2)
loadMeuse()

# Generate a grid to sample on
bb = bbox(meuse)
grd = spsample(meuse, type = "regular", n = 4000)
# Come up with mean cadmium value
# of all points < 1000m.
mn_value = sapply(1:length(grd), function(pt) {
  d = spDistsN1(meuse, grd[pt,])
  return(mean(meuse[d < 1000,]$cadmium))
})

# Make a new object
dat = data.frame(coordinates(grd), mn_value)
ggplot(aes(x = x1, y = x2, fill = mn_value), data = dat) + 
   geom_tile() + 
   scale_fill_continuous(low = "white", high = muted("blue")) + 
   coord_equal()
这将导致以下图像:

但是,如果不知道您使用此地图的目标是什么,我很难看到您想要的确切内容。

这提供了另一种方法--请参阅,以了解该方法的描述以及幻灯片制作结果的视图


但是请注意,幻灯片制作人员使用了sp软件包和
spplot
函数,而不是ggplot2及其绘图函数。

请制作一个可复制的示例。我感觉您正在寻找插值算法,请参阅下面我的帖子,以获取使用克里格(地质统计学)的示例。很好,您已经发布了解决方案,+1。我唯一想指出的是,它缺少“静音”函数的库(缩放)……此外,spplot在引擎盖下使用晶格。