当我尝试将ggmap与shape文件结合使用时,我遇到了剪辑问题。 Kahle和Wickham(2013:158)中的示例工作正常,因为ggmap中的栅格图像覆盖整个形状文件。下面是当我尝试在覆盖较小区域的ggmap图上绘制美国州的形状文件时会发生什么的示例。 ggmap显示了纽约市,我想用美国各州的边框覆盖它(仅作为示例)。生成的地图没有任何意义。问题是形状文件被剪裁,ggplot连接未剪切的点。下面是代码。形状文件来自here。我只是在这里展示最后的情节。
我该如何解决这个问题?
path <- "PATH TO SHAPEFILE"
library("ggmap")
library("rgdal")
# shapefile
states <- readOGR(dsn = path, layer = "states")
states_df <- fortify(states)
# plot shapefile
plot(states, lwd = 0.1)
ggplot(states_df, aes(long, lat, group = group)) +
geom_polygon(colour = "black", fill = NA, size = 0.1)
# combine ggmap with shapefile
map <- get_map("new york city", zoom = 10, source = "stamen")
ggmap(map, extent = "device")
ggmap(map, extent = "device") +
geom_polygon(aes(long, lat, group=group), data = states_df, colour = "red", fill = NA, size = 1)
Kahle,David和Hadley Wickham。 2013.“Ggmap:使用ggplot2进行空间可视化。”R Journal 5(1):144-61。
答案 0 :(得分:4)
这是我的尝试。我经常使用GADM shapefile,您可以使用raster
包直接导入。我将NY,NJ和CT的形状文件分类。您可能最终不必这样做,但最好减少数据量。当我绘制地图时,ggplot会自动删除保留在ggmap图像的bbox之外的数据点。因此,我没有做任何额外的工作。我不确定你使用的是哪个shapefile。但是,GADM的数据似乎与ggmap图像配合得很好。希望这对你有所帮助。
library(raster)
library(rgdal)
library(rgeos)
library(ggplot2)
### Get data (shapefile)
us <- getData("GADM", country = "US", level = 1)
### Select NY and NJ
states <- subset(us, NAME_1 %in% c("New York", "New Jersey", "Connecticut"))
### SPDF to DF
map <- fortify(states)
## Get a map
mymap <- get_map("new york city", zoom = 10, source = "stamen")
ggmap(mymap) +
geom_map(data = map, map = map, aes(x = long, y = lat, map_id = id, group = group))
如果您只想要线条,以下就是您的目标。
ggmap(mymap) +
geom_path(data = map, aes(x = long, y = lat, group = group))
答案 1 :(得分:2)
我会查看这个答案,看起来你想要的ggmap在放大时不会以理想的方式处理多边形,即不在图上的项目会被截断,导致形状文件的“有趣”结果。
Polygons nicely cropping ggplot2/ggmap at different zoom levels
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
static NSString *CellIdentifier = @"cell";
Cell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
if (nil == cell)
{
cell = [[Cell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
PFObject *tempObject = [_myArray objectAtIndex:indexPath.row];
NSString *currentUser = [[PFUser currentUser]username];
//NSLog(@"%@",tempObject);
NSArray *test = [tempObject valueForKey:@"Like"];
//NSLog(@"%lu",(unsigned long)test.count);
NSTimeInterval now = [[[NSDate alloc] init] timeIntervalSince1970];
if ((now - lastClick < 0.3) & [indexPath isEqual:lastIndexPath]) {
//cell.test.hidden = NO;
CGRect frame = CGRectMake(0,0, 80, 40);
UILabel *label1 = [[UILabel alloc]init];
label1.frame = frame;
label1.text = @"first label";
[cell.contentView addSubview:label1];
if ([test containsObject:currentUser]) {
NSLog(@"1");
[tempObject removeObject:currentUser forKey:@"Like"];
[tempObject saveInBackground];
}else {
NSLog(@"2");
[tempObject addUniqueObject:currentUser forKey:@"Like"];
[tempObject saveInBackground];
}
}
lastClick = now;
lastIndexPath = indexPath;
}
带输出:
作为附注,您可能希望使用美国人口普查数据查看状态图,它们似乎质量高于ESRI数据集。
ftp://ftp2.census.gov/geo/pvs/tiger2010st/tl_2010_us_state10.zip
作为最后一点,在极点附近存在ggmap的问题,因此我还会根据您感兴趣的州对数据进行分组。