5

我正在尝试使用通过 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 个状态中的 2 个的映射。我找到的最接近的答案是this,表明map_id需要设置为regionor id,但更改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))
4

1 回答 1

2

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

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

至于 ggplot,你group=group的 aes() 中缺少你。很难重现,因为我不确定您使用的是什么来填充等值线,但以下应该可以工作:

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 代码。

在此处输入图像描述

于 2016-06-17T14:00:23.507 回答