Построение диаграммы рассеяния с большими растрами в R? - PullRequest
2 голосов
/ 20 марта 2020

У меня есть два в

library(raster)
library(sp)
library(rgdal)
library(maptools)
library(sf)
library(dplyr)
library(devtools)
library(DGVMTools)
library(Metrics)
library(hydroGOF)
library(sp)
library(grid)
library(latticeExtra)

> Y
class      : RasterLayer 
dimensions : 2803, 5303, 14864309  (nrow, ncol, ncell)
resolution : 0.008333333, 0.008333333  (x, y)
extent     : 60.85, 105.0417, 15.95833, 39.31667  (xmin, xmax, ymin, ymax)
crs        : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 
source     : memory
names      : layer 
values     : 0, 26.53035  (min, max)

> X
class      : RasterLayer 
dimensions : 2803, 5303, 14864309  (nrow, ncol, ncell)
resolution : 0.008333333, 0.008333333  (x, y)
extent     : 60.85, 105.0417, 15.95833, 39.31667  (xmin, xmax, ymin, ymax)
crs        : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 
source     : memory
names      : VegH
values     : 0, 17.99169  (min, max)

Я строю между этими двумя растрами, plot(x,Y)

Scatterplot 1

Однако из-за большого количества пикселей появляется предупреждение:

Предупреждение: In .local (x , у, ...): на графике использовали образец 0,7% клеток. Вы можете использовать «maxpixels» для увеличения выборки)

После преобразования обоих растров в и построения , для появления диаграммы рассеяния требуется приблизительно 1 час, и она показывает большой черный кусок . enter image description here Воспроизводимые растры:

r1 <- r2 <- raster(nrows=2803, ncols=5303)
    values(r1) <- runif(ncell(r1))
    values(r2) <- runif(ncell(r2))

Мой вопрос заключается в том, как эффективно построить диаграмму рассеяния между двумя большими наборами данных растров, которая также может быть диагностирована визуально?

1 Ответ

0 голосов
/ 21 марта 2020

При таком количестве ячеек образец должен быть таким же, как go, если вы просто хотите осмотреть график рассеяния? Вы можете использовать «maxpixels» для увеличения выборки (как указано в полученном вами предупреждающем сообщении). Например:

X <- Y <- raster(nrows=2803, ncols=5303)
values(X) <- 10 * runif(ncell(X))
values(Y) <- values(X) * (runif(ncell(Y)) - 0.5)

plot(X, Y, maxpixels=1e5)

Но это действительно занимает некоторое время.

Возможно, это лучший способ сделать это - это также займет некоторое время, но позволяет лучше интерпретировать

plot(X, Y, maxpixels=1e5, gridded=TRUE)
...