我有下面的数据框:
mydf <- data.frame(FIP=c(1017,1059,1061,1133,5103,12129,13123,12129),
val=c(100,100,225,400,180,278,180,321))
我想在一张地图上对 FIP 位于 FIP 列中的美国县进行阴影处理,但我陷入困境的是如何对这些特定县进行阴影处理,以便出现类似热图的内容。流行度较高的县更红,流行度较低的县更蓝(就像热图的典型梯度)。
library(tidyverse)
library(usmap)
library(grDevices)
dt <- countypop %>%
dplyr::mutate(selected = factor(ifelse(fips %in% stringr::str_pad(mydf$FIP, 5, pad = "0"),
"1",
"0")))
usmap::plot_usmap(data = dt, values = "selected", color = "grey") +
ggplot2::scale_fill_manual(values = c(rainbow(8))
我可以对特定的县进行着色(尽管如果所有县都将用颜色进行着色!),但我想要在这里有渐变效果。
也许这就是您正在寻找的。据我所知,您想要制作一张地图,其中只有数据框 df 中存在的县根据
val
进行着色。
为此,您可以将
mydf
加入 countypop
。这样做会自动将 NA
分配给未选定县的 val
列。要按 val
着色,您必须将 values
参数设置为等于 "val"
中的 usmap::plot_usmap
。要获得值的渐变,请使用 ggplot2::scale_fill_gradient
,您可以通过 NA
参数设置用于 na.value
的颜色,例如在下面的代码中我使用 na.value = "transparent"
:
mydf <- data.frame(
FIP = c(1017, 1059, 1061, 1133, 5103, 12129, 13123, 12129),
val = c(100, 100, 225, 400, 180, 278, 180, 321)
)
library(usmap)
library(ggplot2)
library(dplyr, warn = FALSE)
mydf <- mutate(mydf, FIP = stringr::str_pad(FIP, 5, pad = "0"))
dt <- countypop %>%
left_join(mydf, by = c("fips" = "FIP"))
plot_usmap(data = dt, values = "val", color = "grey", size = .25) +
scale_fill_gradient(low = "blue", high = "red", na.value = "transparent")