2014-11-05 88 views
0

这里是我的数据:数据丢失通过绘制的地图,GGPLOT2

的shape文件可以在这里下载Swiss Federal Office of Topography

数据在适当的水平可以下载here

这里是我的代码:

library(stringr) 
library(plyr) 
library(rgdal) 
library(ggplot2) 

#load map 
map.gem<- readOGR(dsn="path to your shapefile", layer="VEC200_Commune") 


data <- data.frame(id=rownames([email protected]), 
       [email protected]$BEZIRKSNR) 

data$id <- as.character(data$id) 

bez <- read.csv("~/586.csv", sep=";") 

#bez should look like this: 
head(bez) 
BEZNR res_586 
101  30.76 
102  29.53 
103  28.56 
104  27.71 
105  29.42 
106  28.96 

data1 <- merge(data, bez, by="BEZNR") 
map.df <- fortify(map.gem) 
map.df <- join(map.df, data1, by="id") 

通常这个过程运作良好(感谢@jlhoward),但这次我一路上丢失数据。

这里的ggplot部分:

ggplot(data=map.df, aes(long,lat, group=group))+ 
geom_polygon(aes(fill=res_586))+ 
coord_fixed()+ 
scale_fill_gradient2(low = "palevioletred3", high = "cadetblue", guide = "colourbar")+ 
theme(axis.text=element_blank(), 
    axis.ticks=element_blank(), 
    panel.grid.minor = element_blank(), 
    panel.background = element_blank()) 

一些灰色区域是湖,这是没有问题的。但地图中心的主要区域让我头疼。我希望有人能给我一个提示,尽管我不太确定这个问题是否属于这里。

回答

2

太长的评论。

这个问题似乎是shapefile中的某些多边形有分区nr。 (BEZIRKSNR)= 0。其中一些是湖泊,但很多不是。你可以看到这个如下:

map.sub <- with([email protected],map.gem[BEZIRKSNR==0&COUNTRY=="CH"&SEENAME=="N/A",]) 
ggplot(map.sub,aes(long,lat,group=group))+geom_polygon(fill="red")+coord_fixed() 

上面的子集的代码映射到包括在瑞士只用地区和BEZIRKSNR==0没有SEENAME。你可以看到这些正在使用的区域:

unique([email protected]$GEMNAME) 

由于没有你查询的数据有BEZNR = 0,这些地区有res_589 NA值。我不知道为什么这些地区没有BEZIRKSNR。

+0

再次感谢您的有用评论!我不知道,为什么BEZIRKSNR == 0。我手动添加了这样的真实值:'[email protected]$BEZIRKSNR [map.gem @ data $ KANTONSNR == 4&map.gem @ data $ COUNTRY ==“CH”] < - 400'等 – Thomas 2014-11-06 10:19:42