Two data sets are simulated: - the first data set is constituted os samples randomly located within a dilated bounding box around a rotated grid - the second data set is a sampling of the nodes of the rotated grid nodes.
The first one is used to check the validity of the centering while the second one prooves that centering does not do anything when the data are alreay centered.
nech = 25
dx = c(0.05, 0.025)
nx = c(11, 23)
x0 = c(0.5, 2)
angles = c(20, 0)
delta = 0.1 # margin around the grid bounding box
# Creating the rotated grid
target = DbGrid_create(nx = nx, dx = dx, x0 = x0, angles = angles)
# In real coordinates
bb = bounding_xy(target = target, delta = delta)
XY = as.matrix(cbind(target["x1"], target["x2"]))
# Test of the identity
UV = XY_to_UV(target, XY)
xy = UV_to_XY(target, UV)
# Simulation of uniform scattered points in the local coordinates
# inside the bounding box
bb_uv = bounding_uv(target, delta)
bb_xy = bounding_xy(target, delta)
lim_uv = bb_uv[c(1,3),]
sim_uv = lim_uv[1,] +
matrix(runif(nech * 2), nrow=nech, ncol=2) %*% diag(lim_uv[2,] - lim_uv[1,])
sim_xy = UV_to_XY(target, sim_uv)
data_ini1 = Db_createFromSamples(nech)
data_ini1["x1"] = sim_xy[,1]
data_ini1["x2"] = sim_xy[,2]
data_ini1$setLocators(c("x1", "x2"), ELoc_X())
## NULL
data_ini1["Y"] = rnorm(nech)
data_ini1$setLocators("Y", ELoc_Z())
## NULL
# Second input data set (extracted from the target grid)
data_ini2 = Db_createSamplingDb(target, number=nech, names=c("x1","x2"))
data_ini2["Y"] = rnorm(data_ini2$getSampleNumber())
data_ini2$setLocators("Y", ELoc_Z())
## NULL
Display of the first data set
ggDefaultGeographic() +
plot.XY(bb[,1], bb[,2], flagLine=TRUE, color='blue') +
plot.point(target) +
plot.point(data_ini1, color = "grey", size=4) +
plot.decoration(title="First Data Set")
## Warning in names(guides)[to_change] <- paste0(names(guides), "_new"): le nombre
## d'objets à remplacer n'est pas multiple de la taille du remplacement
Display of the second data set
ggDefaultGeographic() +
plot.point(target) +
plot.point(data_ini2, col = "grey", size=4) +
plot.decoration(title = "Second Data Set")
## Warning in names(guides)[to_change] <- paste0(names(guides), "_new"): le nombre
## d'objets à remplacer n'est pas multiple de la taille du remplacement
Two centering are systematically tested:
The graphic convention is the following one: - the nodes of the target grid are always represented (black dots) - the initial data set are displayed with large size grey symbols - the centered data are displayed with small red circles. - the bounding box is represented as a solid blue line (when relevant)
Performing the manual centering
data_man1 = data_ini1$clone()
err = manual_centering(data_man1, target)
Displaying the centered results
ggDefaultGeographic() +
plot.XY(bb[,1], bb[,2], flagLine=TRUE, color='blue') +
plot.point(target) +
plot.point(data_ini1, col = "grey", size=4) +
plot.point(data_man1, col='red', size=2) +
plot.decoration(title="First Data Set (centered manually)")
## Warning in names(guides)[to_change] <- paste0(names(guides), "_new"): le nombre
## d'objets à remplacer n'est pas multiple de la taille du remplacement
## Warning in names(guides)[to_change] <- paste0(names(guides), "_new"): le nombre
## d'objets à remplacer n'est pas multiple de la taille du remplacement
## Scale for size is already present.
## Adding another scale for size, which will replace the existing scale.
Performing the centering using gstlearn: this is done in place (coordinates have been modified).
data_auto1 = data_ini1$clone()
err = db_center_point_to_grid(data_auto1, target)
Displaying the centered results
ggDefaultGeographic() +
plot.XY(bb[,1], bb[,2], flagLine=TRUE, color='blue') +
plot.point(target) +
plot.point(data_ini1, col = "grey", size=4) +
plot.point(data_auto1, col='red', size=2) +
plot.decoration(title="First Data Set (centered by gstlearn)")
## Warning in names(guides)[to_change] <- paste0(names(guides), "_new"): le nombre
## d'objets à remplacer n'est pas multiple de la taille du remplacement
## Warning in names(guides)[to_change] <- paste0(names(guides), "_new"): le nombre
## d'objets à remplacer n'est pas multiple de la taille du remplacement
## Scale for size is already present.
## Adding another scale for size, which will replace the existing scale.
Performing the manual centering
data_man2 = data_ini2$clone()
err = manual_centering(data_man2, target)
Displaying the centered results
ggDefaultGeographic() +
plot.point(target) +
plot.point(data_ini2, col = "grey", size=4) +
plot.point(data_man2, col='red', size=2) +
plot.decoration(title="Second Data Set (centered manually)")
## Warning in names(guides)[to_change] <- paste0(names(guides), "_new"): le nombre
## d'objets à remplacer n'est pas multiple de la taille du remplacement
## Warning in names(guides)[to_change] <- paste0(names(guides), "_new"): le nombre
## d'objets à remplacer n'est pas multiple de la taille du remplacement
## Scale for size is already present.
## Adding another scale for size, which will replace the existing scale.
Performing the centering using gstlearn: this is done in place (coordinates have been modified).
data_auto2 = data_ini2$clone()
err = db_center_point_to_grid(data_auto2, target)
Displaying the centered results
ggDefaultGeographic() +
plot.point(target) +
plot.point(data_ini2, col = "grey", size=4) +
plot.point(data_auto2, col='red', size=2) +
plot.decoration(title="Second Data Set (centered by gstlearn)")
## Warning in names(guides)[to_change] <- paste0(names(guides), "_new"): le nombre
## d'objets à remplacer n'est pas multiple de la taille du remplacement
## Warning in names(guides)[to_change] <- paste0(names(guides), "_new"): le nombre
## d'objets à remplacer n'est pas multiple de la taille du remplacement
## Scale for size is already present.
## Adding another scale for size, which will replace the existing scale.