我有一张美国分散地区的 map 。这是在以下问题中(包含数据链接):

mapping by ggplot2 geom_polygon goes crazy after merging data

得到了很好的回答。然后我尝试添加美国边界线,因此我将 geom_path 添加到回答的代码中,但没有结果,它创建了仅包含分散区域的相同 map 。

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

r - 美国边界线未添加到美国分散地区的 geom_map  map-LMLPHP

我试过 geom_polygon() 和 geom_maps()。没有不同。这是什么原因,如何解决?

非常感谢你的帮助!

最佳答案

因此,问题在于预测的差异。美国 map 采用 UTM 系统,以米为单位给出东距和北距,但命名为 long 和 lat。而美国 map 处于纬度/经度协调系统中。我在代码中的 fortify 行之前转换了形状,如下所示:

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

这是结果 map :

r - 美国边界线未添加到美国分散地区的 geom_map  map-LMLPHP

关于r - 美国边界线未添加到美国分散地区的 geom_map map ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48472163/

10-12 17:07