Me gustaría trazar una leyenda con dos ejes. Específicamente, he combinado dos objetos espaciales que se han clasificado, el primero que muestra la intensidad de un evento y el segundo que muestra la probabilidad del evento en esa ubicación. Quiero crear una leyenda que muestre dónde caen los píxeles del ráster combinado en cada categoría. La leyenda que me gustaría crear se vería así: Leyenda con dos ejes .
La leyenda normal de los datos clasificados se ve así: Leyenda original
Aquí hay un ejemplo reproducible del tipo de datos que estoy usando:
library(raster)
library(rasterVis)
# setseed
set.seed(999)
# create raster (example of what would be the outcome of combining intensity and probability rasters)
plot.me<- raster(xmn=-110, xmx=-90, ymn=40, ymx=60, ncols=40, nrows=40)
val <- c(100:104, 200:204, 300:304, 400:404)
plot.me<- setValues(plot.me, sample(val,ncell(plot.me),replace=T))
###### Plotting
plot.me <- ratify(plot.me)
levelplot(plot.me,att="ID" ,
col.regions=c("#beffff","#73dfff","#d0ff73","#55ff00",
"#73b2ff","#0070ff","#70a800","#267300",
"#f5f57a","#ffff00","#e8beff","#df73ff",
"#f5ca7a","#ffaa00","#e600a9","#a80084"))
La forma más fácil sería crear la trama y agregar la leyenda más adelante en un editor de gráficos ... ¡pero estoy seguro de que debe haber una manera de hacerlo en R! Actualmente estoy tramando con el paquete rasterVis, pero si hay respuestas en ggplot o base R, estas son igualmente bienvenidas.
Si fuera más útil tener un ejemplo reproducible de los pasos intermedios (es decir, con los rásteres de intensidad / probabilidad), hágamelo saber y puedo producirlos.
rasterVis
produje esta imagen . Si esto es lo que está buscando, pruebe el código disponible aquí (sección "Leyenda bivariada).Reduce
y+.trellis
.Respuestas:
Una solución será hacer dos gráficos y combinarlos usando la
grid.arrange
función delgridExtra
paquete, por ejemploPrimero, convierto su rasterLayer en un tibble usando la función publicada en esta publicación: ¿ Superponer capa de ráster en el mapa en ggplot2 en R?
(PD: modifiqué su
val
objeto para hacer que solo 16 colores diferentes coincidan con el patrón de color que proporcionó. En su ejemplo,val
tiene 20 valores diferentes)Luego, creo el diagrama de puño, el mapa de calor usando
geom_tile
:Luego, creo un marco de datos separado para la leyenda:
Ahora, hice la trama de la leyenda:
Y finalmente, los combino:
¿Se ve lo que estás tratando de conseguir?
NB: Probablemente pueda trazar directamente su objeto ráster,
ggplot2
pero no estaba seguro del procedimiento exacto. Además, puedes jugar con el diseñogrid.arrange
para hacer que la trama se vea exactamente como quieresfuente