如何使用 FIP 在单个地图上绘制具有渐变效果的特定美国县

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

我有下面的数据框:

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))

我可以对特定的县进行着色(尽管如果所有县都将用颜色进行着色!),但我想要在这里有渐变效果。

r ggplot2 plot usmap
1个回答
1
投票

也许这就是您正在寻找的。据我所知,您想要制作一张地图,其中只有数据框 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")

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