3

我从这里这里问过同样的问题,但仍然无法解决我的问题。我认为我需要提出整个问题并寻求帮助,而不是把它分解成小部分。

我有一个数据框,我将它导出到 csv,可以在http://pastebin.com/SNT9Ykt7找到。

chart <- ggplot(data=map.shp,aes(x=long,y=lat))

### PART1 START ###
chart <- chart + geom_polygon(data=map.shp,aes(x=long,y=lat,group=id),colour=rgb(162,159,140,maxColorValue=255),fill=rgb(233,235,232,maxColorValue=255),size=0.1)
### PART1 END ###

### PART2 START ###    
map.group <- unique(map.shp[,"group"])
for (loop in (1:length(map.group))) {
  temp.shp <- map.shp[map.shp[,"group"]==map.group[loop],]
  temp.colour <- "red"
  if (unique(temp.shp[,"hole"])=="TRUE") {
    temp.colour <- "blue"
  }
  chart <- chart + geom_polygon(data=temp.shp,aes(x=long,y=lat,group=id,order=group),colour=rgb(162,159,140,maxColorValue=255),fill=temp.colour,size=0.1)
}
### PART2 END ###

chart <- chart + opts(panel.background=theme_rect(colour=rgb(190,225,247,maxColorValue=255),fill=rgb(190,225,247,maxColorValue=255)),                      
                      panel.grid.major=theme_blank(),
                      panel.grid.minor=theme_blank(),
                      panel.border=theme_blank(),
                      plot.background = theme_blank(),
                      axis.line=theme_blank(),
                      axis.text.x=theme_blank(),
                      axis.title.x=theme_blank(),
                      axis.text.y=theme_blank(),
                      axis.title.y=theme_blank(),
                      axis.ticks=theme_blank())
chart <- chart + coord_cartesian(xlim = range(map.shp[,"long"]), ylim = range(map.shp[,"lat"]))

PART1 脚本给了我这个输出:

在此处输入图像描述

PART2 脚本给了我这个输出:

在此处输入图像描述

实际上这是一块带有一些洞的土地,我将在该层下显示其他内容,因此我必须将洞显示为“洞”,因此无法使用 PART2 脚本显示。但是 PART2 脚本正确地绘制了地图(红色为土地,蓝色为洞)。

我需要修复的 PART1 输出中的一些问题:

  • 孔的某些部分未显示为孔
  • 多边形外的线绘制错误

我不知道我在 PART1 中做错了什么。任何人都可以帮忙吗?

更新01

txt 文件是使用以下代码创建的:

map.shp.raw <- readShapeSpatial("shp_files/map.shp")
map.shp <- fortify(map.shp.raw)

附加的 txt 文件可以保存为 txt 并使用 read.table 命令导入为 data.frame。

4

1 回答 1

10

向@spacedman 点头,他说:

我多年前提出的用于绘制孔的解决方案是确保在每个孔之后您的 x,y 坐标返回到同一个位置。这会阻止线在周围嗡嗡作响并穿过其他多边形并留下绕组数算法不填充(或不应该填充时填充)的开放区域。

(在https://stackoverflow.com/a/12051278/602276中)

所以,让我们听从他的建议:

library(plyr2)
map.shp2 <- ddply(map.shp, .(piece), function(x)rbind(x, map.shp[1, ]))
ggplot(data=map.shp2) + geom_polygon(aes(x=long,y=lat))

在此处输入图像描述

于 2012-08-21T09:32:56.870 回答