Ayuda para elegir el esquema de coloración de mapeo de coropletas bivariado más adecuado

10

Estoy tratando de superponer una variable nominal (2 categorías: de secano frente a irrigada) en un mapa coroplético sobre una variable numérica.

ingrese la descripción de la imagen aquí

Para resaltar la diferencia en el patrón entre las dos categorías, he delineado una categoría con un color diferente (áreas irrigadas en "rojo"), mientras que las no coloreadas son áreas de secano.

Sin embargo, el mapa se siente abarrotado y el contorno se mezcla con sombras más oscuras de la variable numérica.

Estoy tratando de evitar el uso de dos esquemas de sombreado de color diferentes para representar las dos categorías, ya que creo que ocultaría la distribución general de la variable subyacente.

¿Hay una mejor manera de representar esta clasificación bivariada usando el paquete ggplots2 en R (que actualmente estoy usando para hacer el mapa adjunto)?

Estos mapas eventualmente se imprimirán en papel.

varungoel123
fuente
Considere calcular la distancia euclidiana en los bordes del área de riego. Más detalles aquí: gis.stackexchange.com/q/53163/8104
Aaron
@ Aaron, gracias por el enlace, el sombreado direccional podría funcionar para esto, y podría usar la herramienta de búfer para dibujar esas áreas en R. Sin embargo, mi única preocupación sería el tamaño comparativamente pequeño de los polígonos que pueden ser alterados por el más amplio. contornos Probaré esto.
varungoel123
@ varungoel123 Publiqué una solución R usando los paquetes rastery rasterVisque podrían interesarle.
thiagoveloso

Respuestas:

7

En lugar de contornos para indicar las áreas irrigadas, debe usar algo como un patrón de relleno transparente (por ejemplo, líneas, hachures). Un ejemplo sería similar a esto:

http://www.geog.fu-berlin.de/de/Karto/umn_karten/bilder/komb2.png

o simplemente google "patrones de relleno de mapas" para obtener una visión general de las opciones. Usar contornos solo para las áreas irrigadas daría la impresión de que el riego no es un fenómeno continuo.

Chris P
fuente
Esa es una gran sugerencia. ¿Hay alguna manera de hacer esto en ggplot2 o algún otro paquete en R? Tengo alrededor de 60-70 mapas donde la demarcación de las zonas de riego frente a las de riego se mantiene constante. Con ggplot2, pude automatizar la producción de mapas, algo que no pude lograr usando ArcMap o Qgis
varungoel123
No estoy familiarizado con ggplot2 o R. Sin embargo, este patrón de relleno es bastante estándar y no debería ser demasiado difícil de lograr. Sé cómo hacerlo en Qgis o ArcMap. En ambos programas, puede guardar ese estilo una vez que lo haya definido y reutilizarlo. La automatización debería ser posible con ambos. Un script de python o arcpy podría hacer el trabajo por usted.
Chris P
1
Desafortunadamente, ggplot no es bueno para los patrones de relleno (pero vea aquí para una alternativa)
cengel
QGis en la versión 2.0.1 también ofrece producción de mapas automatizada
Zbynek
1

Recientemente tuve que hacer un mapa similar. La solución que se me ocurrió utiliza el paquete rasterVis, en lugar de ggplot2 (que es un paquete increíble, por cierto).

En mi caso, tenía un mapa de tendencias a lo largo del tiempo (que también es una variable numérica) y también un mapa que muestra la importancia de la tendencia (obtenida de una prueba estadística).

En mi caso, quería trazar el mapa de significancia en la parte superior del mapa numérico, algo similar a un patrón "punteado", para mostrar dónde el nivel de confianza era más alto.

Este es aproximadamente el código que utilicé para crear el mapa.

require(raster)
require(rasterVis)

# Scratch raster objects
data(volcano)
r1 <- raster(volcano)

over <- ifelse(volcano >=160 & volcano <=180, 1, NA) # This is the "mask" raster
r2 <- raster(over)

# And this is the key step:
# To convert the "mask" raster to spatial points
r.mask <- rasterToPoints(r2, spatial=TRUE)

# Plot
levelplot(r1, margin=F) +
layer(sp.points(r.mask, pch=20, cex=0.3, alpha=0.8))

En su caso, puede cambiar el código de la siguiente manera:

1) crear un ráster "binario", donde, por ejemplo, 0 es de secano y 1 se riega, y trazarlo tal como lo hice o;

2) crear dos máscaras diferentes, una para la lluvia y otra para el riego, y trazar ambas como objetos diferentes (por ejemplo, círculos para la lluvia y cruces para la lluvia).

Creo que la segunda alternativa haría que el mapa se viera demasiado "contaminado" visualmente, pero siempre puede controlar los parámetros de los puntos consultando la spdocumentación del paquete, específicamente ?sp.points.

Espero eso ayude.

thiagoveloso
fuente