如何在AKIMA中使用interp2xyz修复插值中的缺失值

时间:2019-03-27 23:24:24

标签: r ggplot2 interpolation contour

我正尝试在以下表示PM浓度的坐标处插值不规则间隔的点集,然后生成一个轮廓图,该轮廓图表示整个区域的PM浓度。我使用了AKIMA的interp2xyz进行插值,但是注意到轮廓图上那些小的三角形白色斑点。他们是否由于无法使用均值推断而缺少值?如何解决这些问题以产生平滑的轮廓图?

library(tidyr)
library(dplyr)
library(ggplot2)
library(akima)

site <- c(1:20)

long <- c(171.2496,171.1985,171.2010, 171.2076, 171.2236,171.2165,171.2473,171.2448,171.2416,171.2243,171.2282,171.2344,171.2153,171.2532,171.2444,171.2443,171.2562,171.2330,171.2356,171.2243)

lati <- c(-44.40450,-44.38520,-44.38010,-44.38530,-44.38750,-44.39195,-44.41436,-44.38798,-44.38934,-44.37958,-44.37836,-44.37336,-44.37909,-44.40801, -44.40472,-44.39558,-44.39919,-44.40971,-44.39577,-44.39780)

PM <- c(57,26,12,39,44,48,31,44,46,33,29,12,29,51,50,43,28,40,45,33)

fixed <- cbind(site,long,lati,PM)

### interpolate from fixed monitors

interpdf <-interp2xyz(interp(x=fixed$long, y=fixed$lati, z=fixed$PM, duplicate="mean"), data.frame=TRUE) %>%
  filter(!is.na(z)) %>%
  tbl_df() 


ggplot(interpdf, aes(x=x,y=y,z=z, fill=z)) + 
  geom_contour(binwidth = 0.0005, aes(color= ..level..)) + 
  scale_color_distiller("PM", palette = "Spectral", limits = c(0, 70)) +
  theme_bw()

PMcontour_map

1 个答案:

答案 0 :(得分:1)

akima::interp通过对已知位置中未知位置的值进行插值,从不规则点创建网格。此功能将结果放在用户可以定义的网格上。在您的示例中,您并未定义网格,如功能帮助所示:

  

默认值是在x范围内平均间隔40点。

您想要一个平滑的网格。这可以通过多种方式完成。在屏幕或数据中插入更高的分辨率值。

Hijmans在这里介绍了几种方法:

https://gis.stackexchange.com/a/152533/19056

或者您也可以增加interp函数的分辨率参数。