我正在尝试根据美国加利福尼亚州的邮政编码制作地图。
使用我上一个问题的解决方案(如何在 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
根据文档(参见
?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()