R levelplot,非连续纬度和经度值

时间:2011-08-29 18:00:46

标签: r plot lattice

我有数据集表示为纬度 - 经度和与每个纬度 - 经度对相关联的VALUE(名为“类”),我想表示为使用“lattice”包下的levelplot()或contourplot()为“R”。 样本数据集如下所示:

> data_2[510:520,]
          lon      lat class
510 -47.61849 40.00805     2
511 -47.36740 40.01180     1
512 -47.11629 40.01551     1
513 -46.86518 40.01918     1
514 -46.61404 40.02282     1
515 -46.36290 40.02642     3
516 -46.11173 40.02999     1
517 -45.86056 40.03352     1
518 -45.60937 40.03700     3
519 -45.35817 40.04045     3
520 -45.10695 40.04386     3

主数据集中的经度和纬度值不连续。

我的问题是我没有所有纬度 - 经度组合的“class”值,因此在我尝试绘制上述值时会留下很多空白空间。我想要的是获得连续的,填充的(对于所有纬度 - 长组合)图。

以下是我尝试绘制方式之一的示例:

  

levelplot(data_2 $ class~data_2 $ lon * data_2 $ lat,data = data_2,region = TRUE,aspect =“fill”)

我是否可以使用levelplot()或contourplot()函数中的任何选项来实现此目的,或者“R”中是否有任何其他包/方法可以帮助我提出这个解决方案?

2 个答案:

答案 0 :(得分:1)

我建议您查看免费电子书“地理统计绘图实用指南”(http://spatial-analyst.net/book/download),了解空间估算方法,并在R中提供大量示例。 / p>

正如本指出的那样,你需要进行某种空间插值。以下是使用interpolate包中的intamap函数的快速示例:

library(intamap)
library(lattice)

# Generate an example dataset
set.seed(10)

class1 <- data.frame(lon=rnorm(50, mean=-46, sd=4), 
                     lat=rnorm(50, mean=32, sd=4), 
                     value=1)

class2 <- data.frame(lon=rnorm(50, mean=-40, sd=4), 
                     lat=rnorm(50, mean=39, sd=4), 
                     value=2)

class3 <- data.frame(lon=rnorm(50, mean=-50, sd=3), 
                     lat=rnorm(50, mean=40, sd=2), 
                     value=3)

df <- rbind(class1, class2, class3)

# Generate a 50 x 50 grid over which to predict new values
prediction.grid <- expand.grid(lon=seq(from=min(df$lon), 
                                       to=max(df$lon), 
                                       length=50),
                               lat=seq(from=min(df$lat), 
                                       to=max(df$lat), 
                                       length=50))
# Spatialize the data.frames                           
coordinates(df) <- c("lon", "lat")
gridded(prediction.grid) <- c("lon", "lat")

fit <- interpolate(df, prediction.grid)

# Built-in plots, including variogram and pertinent stats:
plot(fit)

# Pull out the fitted values into a dataframe
predictions <- as.data.frame(t(fit$outputTable))

levelplot(mean ~ x * y, data=predictions, region=TRUE, aspect="fill")

答案 1 :(得分:0)

您需要先进行某种插值。 akima包可能是您最好的选择,请参阅?akima中的示例。 gstat::krige是另一种可能性。