R 我应该什么时候使用geom_地图?

R 我应该什么时候使用geom_地图?,r,ggplot2,maps,choropleth,R,Ggplot2,Maps,Choropleth,我正在制作一张在ggplot中添加了点的choropleth地图。 下面是最后一个 我想到了这个: require(ggplot2) require(maps) set.seed(47) county_map <- map_data("county", "washington") names(county_map)[5:6] <- c("state", "id") countyData <- data.frame(id = unique(county_map$id), val

我正在制作一张在ggplot中添加了点的choropleth地图。 下面是最后一个

我想到了这个:

require(ggplot2)
require(maps)

set.seed(47)
county_map <- map_data("county", "washington")
names(county_map)[5:6] <- c("state", "id")
countyData <- data.frame(id = unique(county_map$id), value = rnorm(39)) 
map1 <- ggplot(countyData, aes(map_id = id)) +
    geom_map(aes(fill = value), map = county_map, colour = "black") +
    coord_map() +
    expand_limits(x = county_map$long, y = county_map$lat)

print(map1)
我无法让它工作。我尝试了很多变化,将
group
设置为
NULL
,命名
aes
参数,等等。运气不好。因此,我通过将地图数据与choropleth数据合并,并使用
geom_polygon
,找到了做完全相同的事情而没有问题的方法,这似乎更简单。(首先,我花了一点时间来计算ID映射,因为我没有意识到我必须删除
区域
列名才能成功使用
ID
。而且第一个方法的语法对我来说仍然很奇怪。)

因此,有两个问题:

  • 如何使用上面所示的方法和
    geom_map
    从不同的数据帧添加点
  • 更重要的是,与
    geom_多边形
    方法相比,使用
    geom_地图
    是否有任何优势
  • 这对我很有用:

    map1 <- ggplot(countyData) +
      geom_map( map = county_map, aes(map_id = id,fill = value), 
                colour = "black") + coord_map() +
      expand_limits(x = county_map$long, y = county_map$lat)
      map1 + geom_point(mapping = aes(xx, yy), data = pointData)
    

    map1您当前的问题是
    ggplot
    无法将点数据绑定到地图。查看您的数据帧,您的地图有以下内容:

    str(countyData)
    'data.frame':   39 obs. of  2 variables:
     $ id   : chr  "adams" "asotin" "benton" "chelan" ...
     $ value: num  1.995 0.711 0.185 -0.282 0.109 ...
    
    …以下是您的观点:

    str(pointData)
    'data.frame':   3 obs. of  2 variables:
     $ xx: num  -120 -123 -122
     $ yy: num  48.1 46.7 48
    
    您是否看到允许
    ggplot
    定位点的任何常见变量

    不过,这个问题很容易解决。我通常使用
    geom_polygon
    而不是
    geom_map
    ,但这在很大程度上是出于习惯。这是有效的,例如:

    colnames(pointData) <- c('long','lat') # makes consistent with county_map
    pointData$group <- 1 # ggplot needs a group to work with
    county_map$value <- sapply(1:nrow(county_map),
                               function(x) round(runif(1, 1, 8), 0)) # for colours
    
    ggplot(county_map, aes(x = long, y = lat, group = group)) +
        geom_polygon(aes(fill = value)) +
        coord_map() +
        geom_point(data = pointData, aes(x = long, y = lat), shape = 21, fill = "red")
    

    colnames(pointData)
    geom_map
    通常比
    geom_polygon
    快得多,因为它可以以更高效的方式进行合并。
    colnames(pointData) <- c('long','lat') # makes consistent with county_map
    pointData$group <- 1 # ggplot needs a group to work with
    county_map$value <- sapply(1:nrow(county_map),
                               function(x) round(runif(1, 1, 8), 0)) # for colours
    
    ggplot(county_map, aes(x = long, y = lat, group = group)) +
        geom_polygon(aes(fill = value)) +
        coord_map() +
        geom_point(data = pointData, aes(x = long, y = lat), shape = 21, fill = "red")