我想根据@data数据框中的相应属性值从SpatialPolygonsDataFrame对象中删除一些多边形,以便我可以绘制简化/子集化的shapefile.到目前为止,我还没有找到办法做到这一点.
例如,假设我要删除此世界shapefile中面积小于30000的所有多边形.我将如何进行此操作?
或者,同样,我如何删除Antartica?
require(maptools)
getinfo.shape("TM_WORLD_BORDERS_SIMPL-0.3.shp")
# Shapefile type: Polygon, (5), # of Shapes: 246
world.map <- readShapeSpatial("TM_WORLD_BORDERS_SIMPL-0.3.shp")
class(world.map)
# [1] "SpatialPolygonsDataFrame"
# attr(,"package")
# [1] "sp"
head(world.map@data)
# FIPS ISO2 ISO3 UN NAME AREA POP2005 REGION SUBREGION LON LAT
# 0 AC AG ATG 28 Antigua and Barbuda 44 83039 19 29 -61.783 17.078
# 1 AG DZ DZA 12 Algeria 238174 32854159 2 15 2.632 28.163
# 2 AJ AZ AZE 31 Azerbaijan 8260 8352021 142 145 …Run Code Online (Sandbox Code Playgroud) 我想用R来生成一个非常基本的世界地图,其中一组特定的国家用红色填充,表明它们是疟疾流行国家.
我在数据框中列出了这些国家/地区的列表,但我正在努力将它们叠加在世界地图上.
我已尝试使用该wrld_simpl对象以及包中的joinCountryData2Map方法rworldmap.
我会评论这个答案,以防止增加一个可能多余的问题,但我目前没有足够的声誉,为此道歉.
我很难理解plot()命令的参数- 我想知道是否有一种简单的方法告诉R在wrld_simpl地图上列出我的列表中的所有国家名称而不是使用grepl()等等.
plot(wrld_simpl,
col = c(gray(.80), "red")[grepl("^U", wrld_simpl@data$NAME) + 1])
Run Code Online (Sandbox Code Playgroud) 当我跑步时gpclibPermit(),我得到了答案FALSE.我怎样才能改变它TRUE?
我是新来的R和是继上发现的GGPLOT2包下面的教程在这里.但是,每当我尝试加载基本shapefile时,readShapePoly()函数都会抛出错误.我使用了以下代码:
library("ggplot2")
library("gpclib")
library("maptools")
setwd("~/Documents/R Projects/Intro to ggplot2")
#Intro to ggplot 2 contains the .shp file and associated data
sport <- readShapePoly("london_sport.shp")
Run Code Online (Sandbox Code Playgroud)
这让我:
Error in getinfo.shape(filen) : Error opening SHP file
Run Code Online (Sandbox Code Playgroud)
我试过省略文件扩展名.我也尝试下载其他.shp文件也会抛出相同的错误.我也尝试使用完整的文件路径调用readShapePoly,这也不起作用.我正在使用R studio(mac OSX),但是使用标准R窗口我得到了同样的错误.我已经尝试过关于以前封闭威胁的建议"在Rstudio中打开SHP文件时出错",但无济于事.
编辑:错误是缺少.dbf文件.感谢@Spacedman的修复.
我猜我有一个简单的解决方案,但我遇到了一些麻烦.
我试图转换以下map对象:
require(maps)
usa <- map("state")
Run Code Online (Sandbox Code Playgroud)
SpatialPolygon使用map2SpatialPolygons函数进入对象:
require(maptools)
usa.sp <- map2SpatialPolygons(usa, IDs=usa$names,proj4string=CRS("+proj=longlat"))
Run Code Online (Sandbox Code Playgroud)
我一直收到以下错误:
Error in map2SpatialPolygons(usa, IDs = usa$names, proj4string = CRS("+proj=longlat")) :
map and IDs differ in length
Run Code Online (Sandbox Code Playgroud)
经过一些研究,看起来ID的长度为63,并且map在应用函数后对象的长度为169 .NAmat2xyList(cbind(map$x, map$y))(我找不到源代码).
有人有主意吗?这是usa地图对象的结构:
> str(usa)
List of 4
$ x : num [1:1705] -88.4 -88.1 -88 -87.9 -87.8 ...
$ y : num [1:1705] 30.4 30.4 30.8 30.6 30.3 ...
$ range: num [1:4] -124.7 -67 25.1 49.4
$ names: …Run Code Online (Sandbox Code Playgroud) 如何在shapefile对象后面绘制"栅格"对象?两者都可以自己绘制,但是这些点不会覆盖栅格:
require(rgdal)
require(maptools)
require(raster)
myproj = "+proj=utm +zone=12 +north +ellps=WGS84 +units=m"
shp = readShapeSpatial(fn.shp, proj4string = CRS(myproj))
ras = raster(fn.tif)
plot(ras)
plot(shp, bg="transparent", add=TRUE)
Run Code Online (Sandbox Code Playgroud) 不妨让猫从袋子里拿出来,并说当我呼唤plot一个课堂对象时,我已经尝试了大约一天来弄清楚发生了什么SpatialPolygons*.我的直觉是寻找plot.SpatialPolygonsDataFrame,这种方法适用于我见过和遇到的任何其他例子,但这种方式失败了.
快速举例:
美国各州.shp文件在这里.
library(maptools)
us.states<-readShapePoly("cb_2014_us_state_5m.shp")
plot(us.states)
Run Code Online (Sandbox Code Playgroud)
有点邋but但是无论如何 - 关键是对一个简单的调用plot和内心深处R知道调用哪个方法以便为我们提供所有形状的表示.
经过一番搜索后,我尝试了各种SO Q&As提出的其他两种方法,首先是:
> methods(plot)
[1] plot.aareg* plot.acf*
[3] plot,ANY,ANY-method plot.cox.zph*
[5] plot.data.frame* plot.decomposed.ts*
[7] plot.default plot.dendrogram*
[9] plot.density* plot.ecdf
[11] plot.factor* plot.formula*
[13] plot.function plot.hclust*
[15] plot.histogram* plot.HoltWinters*
[17] plot.isoreg* plot.lm*
[19] plot.medpolish* plot.mlm*
[21] plot.ppr* plot.prcomp*
[23] plot.princomp* plot.profile.nls*
[25] plot.raster* plot.shingle*
[27] plot,SpatialGrid,missing-method plot,SpatialLines,missing-method
[29] plot,Spatial,missing-method plot,SpatialPixels,missing-method
[31] plot,SpatialPoints,missing-method plot,SpatialPolygons,missing-method
[33] plot.spec* plot.spline*
[35] plot.stepfun plot.stl*
[37] plot.survfit* …Run Code Online (Sandbox Code Playgroud) 我试图从形状文件中读取并将多边形与公共标记ID合并.
library(rgdal)
library(maptools)
if (!require(gpclib)) install.packages("gpclib", type="source")
gpclibPermit()
usa <- readOGR(dsn = "./path_to_data/", layer="the_name_of_shape_file")
usaIDs <- usa$segment_ID
isTRUE(gpclibPermitStatus())
usaUnion <- unionSpatialPolygons(usa, usaIDs)
Run Code Online (Sandbox Code Playgroud)
当我尝试绘制合并的多边形时:
for(i in c(1:length(names(usaUnion)))){
print(i)
myPol <- usaUnion@polygons[[i]]@Polygons[[1]]@coords
polygon(myPol, pch = 2, cex = 0.3, col = i)
}
Run Code Online (Sandbox Code Playgroud)
所有合并的段看起来都很好,除了那些在密歇根州周围以非常奇怪的方式发生合并的那些段,这样特定段的结果区域只给出如下的小多边形.
i = 10
usaUnion@polygons[[i]]@Polygons[[1]]@coords
Run Code Online (Sandbox Code Playgroud)
输出:
[,1] [,2]
[1,] -88.62533 48.03317
[2,] -88.90155 47.96025
[3,] -89.02862 47.85066
[4,] -89.13988 47.82408
[5,] -89.19292 47.84461
[6,] -89.20179 47.88386
[7,] -89.15610 47.93923
[8,] -88.49753 48.17380
[9,] -88.62533 48.03317
Run Code Online (Sandbox Code Playgroud)
原来是一个北方小岛:
我怀疑问题是由于某种原因,该unionSpatialPolygons功能不喜欢地理上分离的多边形[密歇根州的左侧和右侧],但我还没有找到解决方案. …
我在R中使用空间数据进行商业应用,并希望使用ggplot2进行数据可视化.如果您在https://github.com/hadley/ggplot2/wiki/plotting-polygon-shapefiles上运行Hadley的示例,您会发现为了运行该fortify命令,您需要启用gpclib工具的使用gpclibPermit().
我正在寻找一种有效的方法(不涉及手动入侵S4对象)来执行与此相同的操作fortify,即获取空间多边形对象并将其转换为常规数据框,其中行条目包含纬度和纵坐标和多边形id.
还有其他人解决了这个吗?
我正在分析由几个环境变量组成的复杂数据集中的时间模式以及来自各种动物物种的活动数据.这些数据已通过多个实验设置收集,每个设置的数据每分钟存储一次.该项目已经运行了几年,所以我的数据集相当大.
我的一个数据集的前几行看起来像这样:
> head(setup_01)
DateTime Film_number unused PIR Wheel Temperature LightOld LightDay LightNight LightUV IDnumbers error mouse shrew vole rat frog rest extra_info odour
1 2015-03-10 12:27:10 x 0 0 13.40 1471.34 -0.97 1331.29 700.42 no error 0 0 0 0 0 0 1
2 2015-03-10 12:28:10 x 0 0 13.43 1471.38 -1.07 1291.11 731.32 no error 0 0 0 0 0 0 1
3 2015-03-10 12:29:10 x 0 0 13.31 1471.24 -1.08 1368.57 1016.02 no error 0 0 0 …Run Code Online (Sandbox Code Playgroud)