Criei um SpatRaster com o pacote terra em R e tenho dois agrupamentos de pontos dentro do SpatRaster maior, que então separo em grupos para observar os agrupamentos com mais detalhes. Uso terra::plot para plotar o SpatRaster maior e os grupos individuais, mas quero manter a escala de gradiente igual para todos os gráficos. O problema é que o intervalo de valores para cada um dos gráficos é diferente, e não consegui descobrir como definir os limites inferior e superior para o gradiente de cor de cada terra::plot para que sejam iguais, de modo que as cores sejam consistentes.
O pacote ggplot2 não funcionou para esses dados porque são dados SpatRaster, portanto scale_color_gradient
não funciona, tentei uma combinação do col
argumento em terra::plot
, como
plot(DTM_50570, main = "DTM", col = data.frame(from = 0, to = 2000, (terra.pal = terrain.colors(255))))
plot(DTM_50570, main = "DTM", col = data.frame(from = c(0, 1000), to = c(1000, 2000), col = terrain.colors(255)))
plot(DTM_50570, main = "DTM", col = data.frame(from = c(0:10:2550), to = c(0:10:2550), col = terrain.colors(255)))
sem sucesso.
Os dados que estou usando estão neste link: https://tinitaly.pi.ingv.it/Download_Area1_1.html , seção W50570.
Aqui está o código que uso para plotar e separar os grupos:
library(terra)
DTM_50570_32632 <- rast(paste0("Downloads/w50570_s10/w50570_s10/w50570_s10.tif"))
DTM_50570 <- project(x = DTM_50570_32632, "EPSG:4326")
DTM_longitude <- c(11.80111, 11.80222, 11.80333, 11.95111, 11.95222, 11.95333)
DTM_latitude <-c(45.98333, 45.98777, 45.98555, 45.94111, 45.94888, 45.94333)
group_1_extent <- ext(11.80, 11.81, 45.98, 45.99)
DTM_group_1 <- crop(DTM_50570, group_1_extent)
group_2_extent <- ext(11.95, 11.96, 45.94, 45.95)
DTM_group_2 <- crop(DTM_50570, group_2_extent)
DTM_longitude_group_1 <- c(11.80111, 11.80222, 11.80333)
DTM_latitude_group_1 <-c(45.98333, 45.98777, 45.98555)
DTM_longitude_group_2 <- c(11.95111, 11.95222, 11.95333)
DTM_latitude_group_2 <-c(45.94111, 45.94888, 45.94333)
par(mfrow = c(1, 3))
plot(DTM_50570, main = "DTM")
points(DTM_longitude, DTM_latitude, pch = 20)
plot(DTM_group_1, main = "DTM group 1")
points(DTM_longitude_group_1, DTM_latitude_group_1, pch = 20)
plot(DTM_group_2, main = "DTM group 2")
points(DTM_longitude_group_2, DTM_latitude_group_2, pch = 20)
E os gráficos resultantes (todos com escalas de gradiente de cores diferentes)
Você pode usar o argumento "range". Se os rasters tiverem a mesma geometria, você também pode usar
panel
em vez deplot
.DTM_50570
,DTM_group_1
, eDTM_group_2
têm intervalos diferentes de valores de elevação porqueDTM_group_1
eDTM_group_2
são subconjuntos deDTM_50570
. Por padrão,terra::plot
dimensiona o gradiente de cor para o mínimo/máximo de cada raster, resultando em escalas de cores inconsistentes.Suas tentativas de usar col com um data.frame não funcionaram porque a sintaxe para col em
terra::plot
espera um vetor de cores (por exemplo, de terrain.colors(255)) ou uma função, não um data.frame. Além disso, você precisa emparelhar isso com um intervalo fixo para garantir a consistência.Encontre o alcance global
Calcule os valores mínimos e máximos de elevação em todos os três rasters (
DTM_50570
,DTM_group_1
,DTM_group_2
).Definir uma paleta de cores
Use
terrain.colors(255)
(ou outra paleta) para criar um conjunto consistente de cores.Defina o intervalo no gráfico
Use o argumento range
terra::plot
para impor o mesmo intervalo de valores para todos os gráficos, garantindo que o gradiente de cores mapeie os valores de forma consistente.Aplique as mesmas cores
Use o argumento col para aplicar a mesma paleta a todos os gráficos.