我从here和here询问了同样的问题,但仍然无法解决我的问题。我想我需要提出整个问题并寻求帮助,而不是将其分解成小部分。
我有一个数据框,我将其导出到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中做错了什么。有人可以帮忙吗?
使用以下代码创建txt文件:
map.shp.raw <- readShapeSpatial("shp_files/map.shp")
map.shp <- fortify(map.shp.raw)
附加的txt文件可以保存为txt,并使用read.table命令导入为data.frame。
答案 0 :(得分: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))