geom_map所有子区域的颜色相同

时间:2012-04-19 00:11:49

标签: r ggplot2 choropleth

由于ggplot2具有geom_map,我试图从旧的映射数据方式转移到等值区域。第10-11页(HERE)就是一个例子。

我正在尝试使用数据集执行此操作我从过去创建了一个等值线,而不是使用ggplot的新geom_map。这是我的尝试,我认为就像Hadely的例子,但一切都是相同的颜色。

数据集和代码:

#loads 2 data frames: ny and cad from my drop box
load(url("http://dl.dropbox.com/u/61803503/MAPPING.RData"))
library(ggplot2)

ggplot(cad, aes(map_id = subregion)) +
    geom_map(aes(fill = Math_Pass_Rate), map = ny) +
    expand_limits(x = ny$long, y = ny$lat) +
    guides(fill = guide_colorbar(colours = topo.colors(10))) +
    opts(legend.position = "top")

为什么它显示为相同的颜色?


来自@PaulHiemstra的其他信息

我对此感到困惑,但无法取得好成绩。但是,我也想知道为什么你链接到的ggplot2 pdf的例子有效。

此代码生成正确的等值线图。

crimes <- data.frame(state = tolower(rownames(USArrests)), USArrests)
states_map <- map_data("state")
ggplot(crimes, aes(map_id = state)) +
   geom_map(aes(fill = Murder), map = states_map) +
   expand_limits(x = states_map$long, y = states_map$lat) +
   guides(fill = guide_colorbar(colours = topo.colors(10))) +
   opts(legend.position = "top")

可以预期,通过使用map_id = statestates_map(多边形)中的列与crimes中的列(Murder)之间建立了链接。 crimes包含state列:

> head(crimes)
                state Murder Assault UrbanPop Rape
Alabama       alabama   13.2     236       58 21.2
Alaska         alaska   10.0     263       48 44.5
Arizona       arizona    8.1     294       80 31.0
Arkansas     arkansas    8.8     190       50 19.5
California california    9.0     276       91 40.6
Colorado     colorado    7.9     204       78 38.7

states_map没有:

> head(states_map)
       long      lat group order  region subregion
1 -87.46201 30.38968     1     1 alabama      <NA>
2 -87.48493 30.37249     1     2 alabama      <NA>
3 -87.52503 30.37249     1     3 alabama      <NA>
4 -87.53076 30.33239     1     4 alabama      <NA>
5 -87.57087 30.32665     1     5 alabama      <NA>
6 -87.58806 30.32665     1     6 alabama      <NA>

因此,在多边形和数据之间的联系中,似乎正在发生一些黑魔法。这也可以解释@TylerRinker的问题。

1 个答案:

答案 0 :(得分:5)

这是geom_map的记录行为。 geom_map始终从region中提取id变量(或states_map}。以下证实了这一点。运行:

ny$region = ny$subregion

subregion名称放入region列。现在绘制导致正确的图像:

enter image description here

因此,geom_map使用regionid