使用Hadley出色的ggplot2和他的书(第78-79页),我可以使用以下代码轻松生成单个Choropleth映射图:

states.df <- map_data("state")
states.df = subset(states.df,group!=8) # get rid of DC
states.df$st <- state.abb[match(states.df$region,tolower(state.name))] # attach state abbreviations

states.df$value = value[states.df$st]

p = qplot(long, lat, data = states.df, group = group, fill = value, geom = "polygon", xlab="", ylab="", main=main) + opts(axis.text.y=theme_blank(), axis.text.x=theme_blank(), axis.ticks = theme_blank()) + scale_fill_continuous (name)
p2 = p + geom_path(data=states.df, color = "white", alpha = 0.4, fill = NA) + coord_map(project="polyconic")


其中“值”是我正在绘制的状态级别数据的向量。但是,如果我想绘制多个地图(按某个变量(或两个)分组)怎么办?

这是关于各州卫生保健意见的plot done by Andrew Gelman, later adapted in the New York Times的示例:



我希望能够模仿此示例:显示根据两个变量(甚至一个)栅格化的Choropleth图。因此,我不是传递值的向量,而是传递一个组织为“ long”的数据框,每个状态有多个条目。

我知道ggplot2可以做到这一点,但是我不确定如何做到。谢谢!

最佳答案

您可以为所需的分组添加两列并使用构面:

library(ggplot2)
library(maps)
d1 <- map_data("state")
d2 <- unique(d1$group)
n <- length(d2)
d2 <- data.frame(
  group=rep(d2,each=6),
  g1=rep(1:3,each=2,length=6*n),
  g2=rep(1:2,length=6*n),
  value=runif(6*n)
)
d <- merge(d1, d2,  by="group")
qplot(
  long, lat, data = d, group = group,
  fill = value, geom = "polygon"
) +
  facet_wrap( ~ g1 + g2 )

08-17 23:05