【问题标题】:code not working for other shp files代码不适用于其他 shp 文件
【发布时间】:2014-06-04 14:04:24
【问题描述】:

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") 

错误的输出:

任何帮助将不胜感激。

【问题讨论】:

  • 您的merge 可能弄乱了数据的顺序。尝试在它之前创建一个索引并在 merge 之后重新排序数据。
  • 只是为了确认上述内容 - 合并肯定是问题所在。如果你 ggplot 只是印度的多边形,那么 f_india 你会看到问题。

标签: r map ggplot2


【解决方案1】:

您的合并不止一次地匹配每一行,从而在数据中创建重复的行。此外,还有一个排序问题,当没有匹配的行时,您会丢失多边形。

替换

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)), ]

编辑:

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

【讨论】:

  • 但是出了点问题。它应该是蓝色/粉红色的地方,它显示为灰色。这不是@lukeA 提供的先前代码的问题
  • 我可以建议您从头开始再试一次吗 - 它对我来说非常有效。有些州确实仍然是灰色的,但那是因为名称没有匹配,这是一个不同的问题。你不能指望 'UP' 自动映射到 'Uttar Pradesh' 而不做更多的工作。
  • 是的,我已经根据 shp 文件更改了所有名称。但仍然没有给出应有的结果。
  • 代码运行正常,但经纬度变乱了。您可以自己检查
  • 但我认为问题出现在 sapply 阶段合并之前@lukeA
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-09
  • 1970-01-01
  • 1970-01-01
  • 2017-08-24
  • 1970-01-01
  • 1970-01-01
  • 2021-10-17
相关资源
最近更新 更多