geom_map" map_id"参考问题

时间:2016-06-14 18:07:31

标签: r ggplot2 maps choropleth

我正在尝试使用FIPS代码连接的两个数据集创建美国各州的等值区域地图。我正在使用mapscountycounty.fips数据,这些数据组合成一个data.table(可能不是集成FIPS数据的最佳方式):

    library(ggplot2)
    library(maps)
    library(data.table)
    county <- map_data("county")    
    data(county.fips)
    county.fips <- as.data.table(county.fips)
    county.fips$polyname <- as.character(county.fips$polyname)    
    county.fips[, paste0("type", 1:2) := tstrsplit(polyname, ",")]
    names(county.fips) <- c("FIPS","polyname","region","subregion")
    county <- merge(county, county.fips, by=c("region", "subregion"), all=T)
    county <- county[,1:7]
    county <- as.data.table(county)
    county <- na.omit(county)
    setkey(county, order)
    county[region=="washington" & subregion=="san juan", FIPS := 53055]
    county[region=="washington" & subregion=="pierce", FIPS := 53053]
    county[region=="florida" & subregion=="okaloosa", FIPS := 12091]
    county[region=="louisiana" & subregion=="st martin", FIPS := 22099]
    county[region=="north carolina" & subregion=="currituck", FIPS := 37053]
    county[region=="texas" & subregion=="galveston", FIPS := 48167]
    county[region=="virginia" & subregion=="accomack", FIPS := 51001]

我想在此处使用county数据集制作地图,并使用具有相应FIPS列的其他数据集来填写相应的县。使用geom_map,特别是map_id参数时会出现此问题。

以下代码在使用Error in unit(x, default.units) : 'x' and 'units' must have length > 0

运行时返回错误map_id=FIPS
    ggplot() +
  geom_map(data=county, map=county,
           aes(x=long, y=lat, map_id=FIPS))

但是,使用map_id=region运行它会返回一个普通的地图运行它map_id=subregion会返回一个地图,其中约有3个状态缺失。我找到的最接近的答案是this,建议map_id需要设置为regionid,但更改FIPS列名称并不是map_id。帮助。

任何人都可以解释这里发生了什么吗?我的理解是df$column只需要作为另一个FIPS的关键;我不正确吗?理想情况下,我希望能够通过 ggplot() + geom_map(data=county, map=county, aes(x=long, y=lat, map_id=FIPS)) + geom_map(data=DT2, map=county, aes(fill=Revenue, map_id=FIPS)) 列绑定我的第二个数据集,如下所示:

gvSearchResults

1 个答案:

答案 0 :(得分:0)

这里发生了一些事情。首先,我注意到在上面的例子中,它正在切断一些FIPS代码的前导零。所有FIPS都需要五位数。您可以通过将此行添加到数据准备的末尾来添加前导零。

county$FIPS <- formatC(county$FIPS, width = 5, format = "d", flag = "0")

至于ggplot,你在aes()中缺少group=group。它很难复制,因为我不确定你用于等值线填充的是什么,但以下应该有效:

ggplot(county, aes(long, lat, group = group)) +
geom_polygon(aes(fill = YOUR_FILL_DATA), colour = alpha("white", 1/2), size = 0.2)

编辑:我生成了一列随机数作为填充率:

county$new.row <- sample(100, size = nrow(county), replace = TRUE)

并从上面运行相同的ggplot代码。

enter image description here