Как использовать фасетирование с geom_polygon для создания сетки карт

Я пытаюсь использовать фасетирование для создания нескольких карт, заполненных разными значениями.

Я создал упрощенный пример ниже w, который воспроизводит как то, что я пытаюсь сделать, так и результат, которого я не ожидаю от ggplot. Я использую карту Соединенных Штатов и создаю два гипотетических сообщества для штатов. Я могу построить каждое сообщество отдельно, но когда я пытаюсь фасетировать и генерировать их одновременно, я получаю только одну карту.

require(ggplot2)
require(maps)

map <- map_data("state")
states <- unique(map$region)

# generate some hypothetical communities    
runA <- data.frame(region=states, id="A",
                   community=rbinom(length(states),1,.5))
runB <- data.frame(region=states, id="B",
                   community=rbinom(length(states),1,.5))

membership <- rbind(runA, runB)

# plot an individual map of communities from run A
df <- merge(map, runA, by="region")
ggplot(df) +
  aes(long, lat, group=group) +
  coord_equal() +
  geom_polygon(aes(fill = as.factor(community)))

# likewise for B
df <- merge(map, runB, by="region")
ggplot(df) +
  aes(long, lat, group=group) +
  coord_equal() +
  geom_polygon(aes(fill = as.factor(community)))

# now instead do one plot with two maps from facetting on id
df <- merge(map, membership, by="region")
ggplot(df) +
  aes(long, lat, group=group, facets= id ~.) +
  coord_equal() +
  geom_polygon(aes(fill = as.factor(community)))

В идеале на последнем участке должны быть две карты: одна показывает сообщество в «A», а другая показывает сообщество в «B». Вместо этого на графике отображается только одна карта, и я даже не уверен, что отображается в заливке.

5
задан mindless.panda 13 December 2011 в 20:12
поделиться