График уровня R, непостоянные значения широты и долготы - PullRequest
3 голосов
/ 29 августа 2011

У меня есть набор данных, представленный как широта-долгота и ЗНАЧЕНИЕ (названное "класс"), связанное с каждой парой широта-долгота, которую я хочу представить как использующий levelplot () или contourplot () в пакете "lattice"для "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 ]

1 голос
/ 30 августа 2011

Я рекомендую взглянуть на бесплатную книгу "Практическое руководство по геостатистическому картографированию" (http://spatial -analyst.net / book / download) для обзора методов пространственной оценки с большим количеством примеров в R.

Как отметил Бен, вам нужно выполнить некоторую пространственную интерполяцию. Вот краткий пример использования функции 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")
0 голосов
/ 30 августа 2011

Сначала нужно выполнить какую-то интерполяцию. Пакет akima, вероятно, является лучшим выбором, см. Примеры в ?akima. gstat::krige - это еще одна возможность.

...