Aide à choisir le schéma de coloration de cartographie choroplèthe bivarié le plus approprié

10

J'essaie de superposer une variable nominale (2 catégories - pluviale vs irriguée) dans une carte choroplèth sur une variable numérique.

entrez la description de l'image ici

Afin de mettre en évidence la différence de motif entre les deux catégories, j'ai décrit une catégorie avec une couleur différente (zones irriguées en "rouge"), tandis que celles non colorées sont des zones pluviales.

Cependant, la carte semble encombrée et le contour se mélange aux nuances plus sombres de la variable numérique.

J'essaie d'éviter d'utiliser deux schémas de nuances de couleurs différentes pour représenter les deux catégories car je pense que cela masquerait la distribution globale de la variable sous-jacente.

Y a-t-il une meilleure façon de représenter cette classification bivariée en utilisant le paquet ggplots2 dans R (que je l'utilise actuellement pour faire la carte ci-jointe)?

Ces cartes vont éventuellement être imprimées sur papier.

varungoel123
la source
Envisagez de calculer la distance euclidienne aux limites de la zone d'irrigation. Plus de détails ici: gis.stackexchange.com/q/53163/8104
Aaron
@Aaron, merci pour le lien, l'ombrage directionnel pourrait fonctionner pour cela, et je pourrais utiliser l'outil tampon pour dessiner ces zones dans R. Ma seule préoccupation cependant, serait la taille relativement petite des polygones qui peuvent être fudged par le plus large grandes lignes. Je vais essayer ça.
varungoel123
@ varungoel123 J'ai posté une solution R en utilisant les packages rasteret rasterVisqui pourraient vous intéresser.
thiagoveloso

Réponses:

7

Au lieu de contours pour indiquer les zones irriguées, vous devez utiliser quelque chose comme un motif de remplissage transparent (par exemple, des lignes, des hachures). Un exemple ressemblerait à ceci:

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

ou tout simplement google "modèles de remplissage de carte" pour obtenir un aperçu des options. L'utilisation de contours uniquement pour les zones irriguées donnerait l'impression que l'irrigation n'est pas un phénomène continu.

Chris P
la source
C'est une excellente suggestion. Existe-t-il un moyen de le faire dans ggplot2 ou un autre package dans R? J'ai environ 60 à 70 cartes où la démarcation des zones pluviales vs irriguées reste constante. Avec ggplot2, j'ai pu automatiser la production de cartes, ce que je n'ai pas réussi à réaliser avec ArcMap ou Qgis
varungoel123
Je ne connais pas ggplot2 ou R. Cependant, ce motif de remplissage est une chose assez standard et ne devrait pas être trop difficile à réaliser. Je sais comment faire cela dans Qgis ou ArcMap. Dans les deux programmes, vous pouvez enregistrer ce style une fois que vous l'avez défini et le réutiliser. L'automatisation devrait bien être possible avec les deux. Un script python ou arcpy pourrait faire le travail pour vous.
Chris P
1
Malheureusement, ggplot n'est pas bon pour les motifs de remplissage (mais voyez ici pour une alternative)
cengel
QGis dans la version 2.0.1 offre également une production de cartes automatisée
Zbynek
1

J'ai récemment dû faire une carte similaire. La solution que j'ai trouvée utilise le package rasterVis, plutôt que ggplot2 (qui est un package génial, soit dit en passant).

Dans mon cas, j'avais une carte des tendances dans le temps (qui est aussi une variable numérique) et également une carte montrant la signification de la tendance (obtenue à partir d'un test statistique).

Dans mon cas, je voulais tracer la carte de signification au-dessus de la carte numérique, quelque chose de similaire à un motif "pointillé", pour montrer où le niveau de confiance était plus élevé.

C'est à peu près le code que j'ai utilisé pour créer la carte.

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))

Dans votre cas, vous pouvez modifier le code en:

1) créer un raster "binaire", où par exemple 0 est pluvial et 1 est irrigué, et tracez-le comme je l'ai fait ou;

2) créer deux masques différents, un pour les cultures pluviales et un pour les irrigués, et tracer les deux en tant qu'objets différents (par exemple des cercles pour les cultures pluviales et des croix pour les cultures pluviales).

Je pense que la deuxième alternative rendrait la carte trop visuellement "polluée", mais vous pouvez toujours contrôler les paramètres des points en consultant la spdocumentation du package - en particulier ?sp.points.

J'espère que cela aide.

thiagoveloso
la source