数据可视化:使用 ggplot2 和 facet 布局的地图

Data visualization: Maps using ggplot2 and facet layout

我想使用 R 创建条件微图。基本上我想在下面的示例 p_1、p_2、q_1、q_2) 中为四个不同的变量创建一个方面(网格布局)并绘制每个状态图颜色编码 1 代表蓝色,0 代表绿色。

下面是示例代码。用于颜色编码的数据是 "mydata",对于每个变量 p_1、p_2、q_1、[=23,绿色为 0,黑色为 1 =] 我将如何使用 ggplot 完成此操作。

library(ggplot2)
library(maps)
library(scales) # for function alpha()
us.dat <- map_data("state")

ggplot(us.dat, aes(x=long, y=lat, group=group)) + geom_polygon(fill="grey65", colour = alpha("white", 1/2), size = 0.2) + 
  theme_bw() + theme(legend.position = "none", text = element_blank(), line = element_blank()) + coord_map("polyconic") 

# create random data

states <- unique(us.dat$region)
p_1 <- sample(0:1,49,replace=T)
p_2 <- sample(0:1,49,replace = T)
q_1 <- sample(0:1,49,replace=T)
q_2 <- sample(0:1,49,replace = T)

mydata <- as.data.frame(t(rbind(states,p_1,p_2,q_1,q_2)))

下面的图表布局是我想用一个常见的图例完成的。

您需要重新格式化您的数据,使其成为长格式,并且您的变量由一个键标识。然后您需要将其与空间数据合并。然后使用facet_wrap(~ key)创建四个面板。

试试这个:

library(dplyr)
library(tidyr)
us.dat %>%
  dplyr::left_join(
    mydata %>% 
      tidyr::gather(key, value, -states),
    by = c("region" = "states")
  ) %>%
  ggplot(aes(x=long, y=lat)) + 
  geom_polygon(aes(group=group, fill = value),
               colour = alpha("white", 1/2), 
               size = 0.2) + 
  theme_bw() + 
  theme(# legend.position = "none", 
        line = element_blank(),
        axis.text = element_blank(),
        axis.title = element_blank(),
        strip.background = element_blank(),
        panel.border = element_blank()
        ) + 
  coord_map("polyconic") +
  facet_wrap(~ key)

我添加了一些主题元素以使其看起来与您想要的相似。 您将需要使用 scale_fill_manual() 来获得您想要的颜色。