Ho scoperto che quando provo a sovrapporre più raster usando la trama (..., add = T) se provo a sovrapporre più di 3 raster insieme il grafico successivo non allinea correttamente i raster.Sovrapposizione trama raster utilizzando trama (..., add = T) porta a disallineamento arbitrario della trama finale
Il mio intento originale era quello di creare una mappa categoriale di landcover modellato in cui l'oscurità del colore che rappresenta una classe di copertura variava in base alla certezza nella nostra proiezione del modello. Per fare ciò, ho creato uno script semplice che passasse in rassegna ogni classe di copertina e lo tracciasse (ad esempio, foresta, colore verde sulla mappa) usando un gradiente di colore da grigio (previsione della foresta a bassa certezza) a colore di copertura completo (ad esempio, verde scuro per le aree sono fortemente previsti). Quello che ho trovato è che usando questo approccio, dopo che la terza copertina è stata aggiunta alla trama, tutti i raster successivi che sono sovrapposti sul tracciato sono arbitrariamente disallineati. Ho invertito l'ordine di pianificazione delle classi di copertura e viene mostrato lo stesso comportamento, il che significa che non è un problema con i raster di classe di copertura individuale. Ancora più sconcertante in Rstudio, quando uso il pulsante dello zoom per ispezionare da vicino la trama finale, il disallineamento peggiora.
Avete qualche idea del perché questo comportamento esiste? Soprattutto, hai qualche soluzione suggerita o soluzioni alternative?
Il codice e i dati sul link sottostante riportano tutti i comportamenti descritti. https://dl.dropboxusercontent.com/u/332961/r%20plot%20raster%20add%20issue.zip Turn plot_gradient = F per vedere come se semplicemente si sommi semplicemente uno stesso raster e si aggiungano i sottoinsiemi in modo sequenziale allo stesso grafico è possibile replicare il problema. Ho già provato a impostare l'estensione della trama del dispositivo (..., ext) ma non ha funzionato. Ho anche controllato e l'estensione di ogni copertina raster è la stessa.
Di seguito è riportata la figura delle classi di copertura disallineate. il tracciamento sul dispositivo jpeg avrà come risultato un'immagine simile (ad esempio, questo non è un problema del rendering Rstudio). Stranamente, se zoom della immagine utilizzando Rstudio, il disallineamento è diverso Per fare un confronto, questo è come le coperture devono essere allineati correttamente nel paesaggio
library(raster)
library(colorRamps)
raster_of_classes=raster("C:/r plot raster add issue/raster_of_classes.tif")
raster_of_certainty_of_classes=raster("C:/r plot raster add issue/raster_of_certainty_of_classes.tif")
endCols=c("darkorchid4", "darkorange3", "red3", "green4", "dodgerblue4") #colors to be used in gradients for each class
classes=unique(raster_of_classes)
minVal=cellStats(raster_of_certainty_of_classes, min)
tmp_i=1
addPlot=F
plot_gradient=F #this is for debug only
#classes=rev(classes) #turn this off and on to see how last 2 classes are mis aligned, regardless of plotting order
for (class in classes){
raster_class=raster_of_classes==class #create mask for individual class
raster_class[raster_class==0]=NA #remove 0s from mask so they to do not get plotted
if (plot_gradient){
raster_of_certainty_of_class=raster_of_certainty_of_classes*raster_class #apply class mask to certainty map
}else{
raster_of_certainty_of_class=raster_class #apply class mask to certainty map
}
endCol=endCols[tmp_i] #pick color for gradient
col5 <- colorRampPalette(c('grey50', endCol))
if (plot_gradient){
plot(raster_of_certainty_of_class,
col=col5(n=49), breaks=seq(minVal,1,length.out=50), #as uncertainty values range from 0 to 1 plot them with fixed range
useRaster=T, axes=FALSE, box=FALSE, add=addPlot, legend=F)
}else{
plot(raster_of_certainty_of_class,
col=endCol,
useRaster=T, axes=FALSE, box=FALSE, add=addPlot, legend=F)
}
tmp_i=tmp_i+1
addPlot=T #after plotting first class, all other classes are added
}
Non ho l'energia in questo momento al lavoro attraverso tutta la logica che si utilizza per produrre i molteplici raster che stai tramando, ma una soluzione ragionevole al problema sarà quello di istituire un unico raster codifica le diverse classi e per tracciare * that *. Se devi produrre più raster intermedi, uno per ogni classe, puoi rimetterli insieme con una serie di chiamate a 'raster :: cover (x, y)'. –
In effetti, è facile tracciare una mappa di copertura del suolo con un colore monotono specificato per ciascuna copertina. Tuttavia, poiché mi interessa che ogni copertina sia mappata con un gradiente di colore indicativo della certezza del modello, non sembra possibile un semplice approccio alla mappatura dei colori –
Aha. Io vedo. In teoria dovrebbe essere ancora possibile applicare un insieme di valori raster e una scala di colori corrispondente per farlo. Posso vedere come in pratica, però, sarà molto più difficile che dipingere uno strato dopo l'altro sopra a quelli precedenti. –