代码不适用于其他shp文件

时间:2014-06-04 14:04:24

标签: r map ggplot2

here中提出的问题已经解决,但不知何故,它不适用于不同的shp文件。知道为什么吗? 我一直在尝试使用Coloring the states according to a given variable using ggplot(第一个链接)

中的shp文件

代码:

library(maptools)
library(ggplot2)
download.file("http://geocommons.com/overlays/204743.zip", destfile="204743.zip")
dir.create("ind")
unzip("204743.zip", exdir="ind")
india <- readShapeSpatial("ind/india_state.shp")
f_india <- fortify(india)
i <- sapply(india@data$NAME, function(x) agrep(x, data$Row.Labels, max.distance=.3, ignore.case=T)[1]) 
india@data$maj <- data$MAJORITY[i]
f_india <- merge(x=f_india, y=india@data, by.x="id", by.y="ID")
ggplot(f_india, aes(x=long, y=lat, group=group, fill=maj)) + 
  geom_polygon(colour="black") 

输出错误:

enter image description here

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:5)

您的合并多次匹配每一行,在数据中创建重复的行。此外还存在排序问题,如果没有匹配的行,则会丢失多边形。

替换

f_india <- merge(x=f_india, y=india@data, by.x="id", by.y="ID")

f_india <- merge(x=f_india, y=unique(india@data), by.x="id", by.y="ID",all.x=T)
f_india <- f_india[with(f_india, order(id, order)), ]

修改

这是我得到的输出。灰色多边形是由不匹配的名称引起的,但这是我能看到的唯一问题。

working map