gpt4 book ai didi

r - geom_map "map_id"引用问题

转载 作者:行者123 更新时间:2023-12-03 18:28:19 25 4
gpt4 key购买 nike

我正在尝试使用通过 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 dataset 在这里制作 map ,并使用具有相应 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 运行它返回一张 map ,其中缺少大约 3 个州中的 2 个。我找到的最接近的答案是 this ,暗示 map_id需要设置为 regionid ,但更改 FIPS列名没有帮助。

谁能解释这里发生了什么?我的理解是 map_id只需要作为另一个 df$column 的 key ;我不正确吗?理想情况下,我希望能够通过 FIPS 绑定(bind)我的第二个数据集。列,像这样:
    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))

最佳答案

这里发生了几件事。首先,我注意到在上面的示例中,它切断了一些 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 代码。

enter image description here

关于r - geom_map "map_id"引用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37819187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com