使用合并将 shapefile 和数据组合起来,以使用美国邮政编码进行映射

问题描述 投票:0回答:1

我正在尝试根据美国加利福尼亚州的邮政编码制作地图。

使用我上一个问题的解决方案(如何在 R 中使用邮政编码创建地图?),我使用以下方法获取了 CA 邮政编码:

library(tigris)
library(ggplot2)

zipcode <- zctas(year = 2000, state = "CA", cb = TRUE) 

然后,我得到了清理过的邮政编码文件(名为“ca”),其中有一列邮政编码和一列整数计数。

我使用以下内容组合了两个数据集,首先是邮政编码,因为这将保存几何图形。

zipcodes <- merge(zipcode, ca, by = "ZCTA", all.x = TRUE) %>%
  rename(COUNT = "Count")

这是绘制代码:

ggplot() +
  geom_sf(data = zipcodes, aes(fill = COUNT)) +
  scale_fill_gradientn(colors = c("red", "cornsilk", "#f0d080"),
                       values = c(1, 14150, 28307, na.value = "gray")) + #28307 is the max count.
  theme_minimal() 

它正在生成以下地图,它似乎不喜欢我的渐变代码......

有些行的 COUNT 确实为 NA,因为我的数据集没有每个 zip 的计数,但我想保留它们的几何形状以便绘制完整的地图。

绘图时,我还收到错误消息:

Warning messages:
1: In xy.coords(x, y, setLab = FALSE) : NAs introduced by coercion
2: In xy.coords(x, y, setLab = FALSE) : NAs introduced by coercion
3: In xy.coords(x, y, setLab = FALSE) : NAs introduced by coercion
r ggplot2 geospatial tigris
1个回答
0
投票

根据文档(参见

?scale_fill_gradientn
values

给出颜色向量中每种颜色的位置(在 0 和 1 之间)。

因此,您必须将传递给

values
的向量重新缩放到 0 到 1 的范围,例如除以最大值或使用
scales::rescale(c(1, 14150, 28307))
这也会将第一个值置于 0 位置。

除此之外,您还将

na.value
包含在“值”向量中。

library(tigris)
library(ggplot2)
library(dplyr)

zipcode <- zctas(year = 2000, state = "CA", cb = TRUE)

set.seed(123)

ca <- data.frame(
  ZCTA = sample(zipcode$ZCTA, 200),
  Count = sample(28307, 200)
)

zipcodes <- merge(zipcode, ca, by = "ZCTA", all.x = TRUE) %>%
  rename(COUNT = "Count")

ggplot() +
  geom_sf(data = zipcodes, aes(fill = COUNT)) +
  scale_fill_gradientn(
    colors = c("red", "cornsilk", "#f0d080"),
    values = scales::rescale(c(1, 14150, 28307)),
    na.value = "gray"
  ) +
  theme_minimal()

© www.soinside.com 2019 - 2024. All rights reserved.