1 votos

Leyenda categórica - R

Tengo lo siguiente RasterLayer que contiene valores categóricos para cada píxel. Estoy utilizando el siguiente código para trazarlo

par(xpd)=FALSE
plot(LC, legend=FALSE, col=c("lightcyan3","royalblue","forestgreen","coral3","papayawhip"),xaxt='n', yaxt='n') 

par(xpd=TRUE)
legend("bottom", legend=c("Urban","Water","Forest","Agriculture", "Bare soil"),fill=c("lightcyan3","royalblue","forestgreen","coral3","papayawhip"),horiz = TRUE, inset=-0.175)

enter image description here

En total tengo 5 clases pero debido a la configuración de la leyenda sólo 4 son swhon. Quiero que todos los elementos de la leyenda estén más cerca. He intentado utilizar text.width=c(1,1,1,1) por ejemplo para establecer las distancias, pero no está haciendo el trabajo.

Estoy utilizando un enfoque similar al propuesto aquí y estaba considerando utilizar también el rasterVis paquete

2voto

Como @spacedman señalarlo, creo que el problema es causado por parcelas anteriores que tengo que crear. Como no puedo tener una sesión de R fresco en este momento, estoy usando una solución basada en esta entrada y @ChristopherStephan enlace . He resuelto mi problema utilizando el rasterVis que me parece más conveniente que utilizar el paquete normal plot para raster.

En lugar de utilizar el código que se muestra en la pregunta, éste hace el trabajo.

En primer lugar, utilizo as.factor para arreglar mi original raster layer

myraster<-as.factor(myraster)

Luego añado un extra attribute que se utilizará para la leyenda

tar<-levels(myraster)[[1]]
tar[["landcover"]]<-c("Class1", "Class2")
levels(myraster)<-tar

Luego trazo utilizando levelplot del rasterVis paquete

levelplot(myraster, col.regions=c("red","white"))

La leyenda muestra ahora mis clases y su tamaño es adecuado

enter image description here

1voto

olds22 Puntos 61

¿Has intentado pasar cex = 0.75 en la llamada a la función de leyenda?

Sin embargo, no tengo problemas con el espaciado para la leyenda con o sin cex .

library(raster)

set.seed(100)
ras <- raster(ncol = 100, nrow = 100)
ras <- setValues(ras, (1:ncell(ras)) / 100 + rnorm(ncell(ras)) - 50)
plot(ras)

par(xpd = FALSE)
plot(
  ras,
  legend = FALSE,
  col = c(
    "lightcyan3",
    "royalblue",
    "forestgreen",
    "coral3",
    "papayawhip"
  ),
  xaxt = 'n',
  yaxt = 'n'
)

par(xpd = TRUE)
legend(
  "bottom",
  legend = c("Urban", "Water", "Forest", "Agriculture", "Bare soil"),
  fill = c(
    "lightcyan3",
    "royalblue",
    "forestgreen",
    "coral3",
    "papayawhip"
  ),
  horiz = TRUE,
  inset = -0.175
)

Si desea utilizar el rasterVis hay un ejemplo para los raster categóricos aquí .

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X