Suite

Comment créer un schéma de couleurs discret personnalisé pour les attributs de polygone dans ggplot2 ?


De retour avec d'autres questions. :)

Données: Zippéch.ml1shapefile peut être trouvé ici, et le contour du pays peut être téléchargé ici sur le site GADM. J'ai utilisé le fichier de formes Ethiopia ESRI.

Conformément aux suggestions sur une question précédente, j'ai décidé d'essayer de transformer mon projet/test de carte en cours enggplot2pour la facilité d'utilisation. Vous pouvez consulter mon code original complet non-ggplot ici si vous aimez ce genre de chose. J'ai fait un tout petit peu de cartographie avecggplot2dans le passé, donc je le connais un peu, mais je ne le maîtrise certainement pas. Je me demande comment changer/personnaliser mon schéma de couleurs pour leML1attributs de mon polygone d'Éthiopie. Cela devrait ressembler à ceci (ce que j'ai fait avec les fonctions de tracé de base, comme on le voit dans mon code lié):

En utilisant ce bref tutoriel de GitHub, j'ai réussi à me débrouiller un peu avec mon code pour créer ceci :

bibliothèque(ggplot2) bibliothèque(maptools) bibliothèque(rgdal) bibliothèque(rgeos) bibliothèque(raster) bibliothèque(plyr) setwd("D:/Mapping-R/Ethiopia") ea.ml1 <- readOGR(dsn = "D:/ Mapping-R/Ethiopia", layer = "EA201507_ML1") eth <- readOGR(dsn = "D:/Mapping-R/Ethiopia", layer = "ETH_adm0") #supprimer toutes les colonnes indésirables de eth shapefile eth <- eth[ , -(2:67)] #définir le schéma de couleurs pour les fonctionnalités ml1 et ml2 [email protected]$COLOR[[email protected]$ML1 == 1] <- "gris" [email protected]$COLOR[ea [email protected]$ML1 == 2] <- "jaune" [email protected]$COLOR[[email protected]$ML1 == 3] <- "orange" [email protected]$COLOR[ea.ml1 @data$ML1 == 4] <- "red" #clip ethiopia to ml1 background eth.clip1 <- intersect(ea.ml1, eth) #identifie les lignes d'attribut, convertit en bloc de données, joint les points aux attributs [email protected] data$id <- rownames([email protected]) eth.f <- fortify(eth.clip1, region = "id") eth.df <- join(eth.f, [email protected], by = " id") ggplot(eth.df) + aes(long, lat, group = group, fill = ML1) + geom_polygon() + geom_path(color="white") + coord_equal()

ce qui a donné ceci :

Comment personnaliser monggplot2schéma de couleurs (qui est en fait défini dans le code, je ne sais pas si c'est utile ou non) pour correspondre à la première image de carte que j'ai publiée (où une valeur ML de 1 est grise, 2 est jaune, etc.) ? Le didacticiel lié répertorie simplement son schéma de couleurs comme "Utah Ecoregion" sans aucun détail sur son origine/à quoi il ressemble. J'ai également essayé la solution répertoriée ici en vain; R vient de me cracher des erreurs absurdes.

ggplot(eth.df) + aes(long, lat, group = group, fill = ML1) + geom_polygon() + scale_fill_manual(values ​​= (1 = "gris", 2 = "jaune", 3 = "orange", 4 = "rouge")) + geom_path(color="white") + coord_equal()

me donne ces erreurs :

Erreur : ',' inattendu dans : " geom_polygon() + scale_fill_manual(values ​​= (1 = "gray", "

Erreur dans geom_path(color = "white") + coord_equal() : argument non numérique de l'opérateur binaire'

Alors, comment personnaliser le schéma de couleurs sans tout gâcher ?


Grâce à un chat avec une aide immense de @MLavoie, nous avons résolu le problème en changeant le type de données de monML1attributs d'un entier au facteur et en ajoutant un c() pour formater correctement la liste des couleurs. Le nouveau code devrait ressembler à ceci :

ggplot(eth.df) + aes(long, lat, group = group, fill = factor(ML1)) + geom_polygon() + scale_fill_manual(values ​​= c("gris", "jaune", "orange", "rouge" )) + geom_path(color="white") + coord_equal()

Ou bien:

ggplot() + geom_polygon(data = eth.df, aes(long, lat, group = group, fill = factor(ML1))) + scale_fill_manual(values ​​= c("gris", "jaune", "orange", " rouge"))

R enregistrait mon discretML1valeurs comme continues, d'où la légende/le schéma de couleurs continu indiqué dans ma question. En changeant cela en un facteur (ce qui aurait également pu être fait avant d'implémenter le code ggplot), j'ai pu modifier le code pour obtenir ce dont j'avais besoin.