4 votes

La ligne frontalière américaine n'est pas ajoutée aux cartes geom_map des régions américaines dispersées

J'ai une carte des parties dispersées aux Etats-Unis. C'est dans la question suivante (qui contient le lien vers les données) :

cartographie par ggplot2 geom_polygon devient fou après la fusion des données

Il a été très bien répondu. Ensuite, j'ai essayé d'ajouter la ligne de frontière américaine, donc j'ai ajouté le geom_path au code répondu, mais aucun résultat, il crée la même carte contenant juste les zones dispersées.

library(ggplot2)
#library(tidyverse)
library(dplyr)
library(maps)
load("./data.rda")

usa <- map_data("usa")
shape_map <- tbl_df(fortify(shape, region="Name"))
colnames(shape_map) <- c("long", "lat", "order", "hole", "piece", "region", "group")

ggplot() +
    geom_path(data = usa, aes(long, lat, group=group))+
    geom_map(data=shape_map, map=shape_map, aes(long, lat, map_id=region)) +
    geom_map(
        data=filter(prop.test, season=="DJF"),
        map=shape_map, aes(fill=prop.mega, map_id=megaregion)
    )

Us borderline is not plotted

J'ai essayé geom_polygon() et geom_maps(). Aucune différence. Quelle est la raison, et comment la résoudre ?

Merci beaucoup pour votre aide !

3voto

BobbyF Points 154

Donc, le problème était les différences dans les projections. La carte américaine était dans un système UTM, donnant l'est et le nord en mètres, mais nommés comme long et lat. alors que la carte américaine était dans un système de coordination lat/lon. J'ai transformé la forme juste avant la ligne fortify dans le code comme ci-dessous :

library(ggplot2)
library(tidyverse)

usa <- map_data("usa", )

shape <- spTransform(shape, CRS("+proj=longlat +datum=WGS84"))
shape_map <- fortify(shape, region="Name")

colnames(shape_map) <- c("long", "lat", "order", "hole", "piece", "region", "group")

prop.test <- proptest.result[which(proptest.result$variable=="Upward N"),]

ggplot() +
  geom_map(
    data=usa, map=usa, aes(long, lat, map_id=region),
    color="#2b2b2b", fill="#00000000"
  ) +
  geom_map(
    data=shape_map, map=shape_map, 
    aes(long, lat, map_id=region)
  ) +
  geom_map(
    data=filter(prop.test, season=="DJF"),
    map=shape_map, aes(fill=prop.mega, map_id=megaregion)
  ) +
  viridis::scale_fill_viridis(direction=-1) +
  coord_map("polyconic") +
  ggthemes::theme_map()

et voici la carte obtenue :

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X