Я хочу отобразить данные xy с помощью растровой сетки в масштабе 0,5 градуса, а затем подсчитать количество точек xy в каждой ячейке 0.5 - PullRequest
0 голосов
/ 01 июля 2019

У меня есть глобальные данные, показывающие прогнозируемый ареал вида в виде точек. Моя цель - подсчитать количество вхождений в ячейках с разрешением 0,5 градуса.

Я полагаю, что могу сделать это, создав растр в той же системе координат ...

rast <- raster(xmn= -180, ymn= -90, xmx = 180, ymx = 90, resolution = 0.5,
            crs = '+proj=utm +zone=33 +ellps=WGS84 +datum=WGS84 +units=m +no_defs ')

Мне нужно посчитать количество x / y вхождений в каждой ячейке.

В большинстве прочитанных мною примеров используется значение счетчика из данных, но в моих данных нет счетчика, поскольку каждая строка зависит от вида. Я думаю, мне нужно создать какую-то сетку или сетку 0,5 градуса, а затем использовать это для подсчета точек х / у?

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 01 июля 2019

Использование rasterize(..., fun = "count")

Вот воспроизводимый пример, взятый из документов (?rasterize).

library(raster)

# create a raster
r <- raster(ncols=36, nrows=18)
n <- 1000

# create some points
set.seed(123)
x <- runif(n) * 360 - 180
y <- runif(n) * 180 - 90
xy <- cbind(x, y)

# count the number of points in each raster cell
r0 <- rasterize(xy, r, fun = "count")

# visualize
plot(r0); points(xy, pch = 16, cex=0.5)

enter image description here


Чтобы проверить разрешение RasterLayer, используйте res(raster_object).Чтобы изменить это разрешение, используйте присвоение:

x_res <- 100  # resolution in x
y_res <- 100  # resolution in y
res(raster_object) <- c(x_res, y_res)  # set the x,y resolution of the raster

Поскольку вам нужны растровые ячейки 0,5 градуса, сначала проверьте, в каких единицах измерения находится ваш crs (например, в метрах), вычислите разрешение x и y в этих единицах,и затем назначьте это разрешение на растр.Также имейте в виду, что градусы широты немного различаются в зависимости от того, находитесь ли вы ближе к экватору или полюсам.


Для визуализации с помощью ggplot вы можете преобразовать объект RasterLayer в data.frameтак.Хотя я этого не показываю, вы можете добавить точки как еще один слой geom_point или geom_sf в объект ggplot.

# convert to data.frame and plot with ggplot
df <- as.data.frame(r0, xy=TRUE)

library(ggplot2)
ggplot(df, aes(x, y, fill = layer)) +
  geom_raster() +
  scale_fill_viridis_c(na.value = "white") +
  labs(fill = "Count") +
  theme_minimal()

enter image description here

...