以前工作的ggplot2脚本现在返回fortify的致命错误

时间:2015-06-16 20:31:35

标签: r ggplot2 gis fatal-error ggmap

我之前编写了一个脚本来创建美国的彩色地图,每个州都根据一些模拟数据着色。这个想法是以后能够用一些措施替换模拟数据。它被写成是自包含的并且最初运行得很好,但是现在在fortify {ggplot2}命令运行时崩溃了。

我认为这是由于fortify命令的问题,因为它返回致命错误并在该点重新启动R.这是致命错误的代码:

###Load libraries
library(maptools)
library(ggplot2)
library(ggmap)
library(rgdal)
library(dplyr)

#Set working directory to where you want your files to exist (or where they already exist)
#Download, read and translate coord data for shape file of US States
if(!file.exists('tl_2014_us_state.shp')){
        download.file('ftp://ftp2.census.gov/geo/tiger/TIGER2014/STATE/tl_2014_us_state.zip',
                      'tl_2014_us_state.zip')
        files <- unzip('tl_2014_us_state.zip')
        tract <- readOGR(".","tl_2014_us_state") %>% spTransform(CRS("+proj=longlat +datum=WGS84"))
} else {
        tract <- readShapeSpatial("./tl_2014_us_state.shp") #%>% spTransform(CRS("+proj=longlat +datum=WGS84"))
}
# shape<-readShapeSpatial("./fao/World_Fao_Zones.shp") 

#Download reference data for state names and abbreviations - a matter of convenience if there are 
#states for which you have no data
if(!file.exists('states.csv')){
        download.file('http://www.fonz.net/blog/wp-content/uploads/2008/04/states.csv',
                      'states.csv')
        states <- read.csv('states.csv')
} else {
        states <- read.csv('states.csv')
}

#simulated data for plotting values of some 'characteristic'
mydata           <- data.frame(rnorm(51, 0, 1)) #51 "states" in the state dataset
names(mydata)[1] <- 'value' #give the simulated column of data a name

#Turn geo data into R dataframe
tract_geom<-fortify(tract,region="STUSPS") #STUSPS is the state abbreviation which will act as a key for merge

脚本在上面一行停止工作,并在发生致命错误时崩溃。我尝试了another post中描述的解决方法,在其中放置了明确的&#34; id&#34;空间数据框中的列,默认情况下fortify将用作关键字。通过这个修改线:

tract@data$id <- tract@data$STUSPS
tract_geom    <- fortify(tract)

将替换上一代码中的tract_geom<-fortify(tract,region="STUSPS"), 其中STUSPS是后来数据合并的关键。

不幸的是,当我加强道数据时,id列不是预期的状态缩写,而是&#34; 0&#34;之间的字符向量。和&#34; 55&#34; (56个独特的价值观)。似乎州的缩写(其中有56个)以某种方式被转换为数字然后转换为字符。

我正在研究为什么会发生这种情况并寻找解决方法。如果fortify函数与region参数一起使用,那将是理想的,但如果我可以使解决方法起作用,那也会很棒。任何帮助将不胜感激。我查看了文档和各种类似问题的解决方案,并且做得很简单(甚至尝试过ArcGIS)。

2 个答案:

答案 0 :(得分:2)

尝试:

readOGR(..., stringsAsFactors=FALSE, ...)

答案 1 :(得分:0)

我能够通过运行io.py来解决我自己的问题。我不完全确定哪个软件包是罪魁祸首,但可能是sys.pathupdate.packages()maptools,因为这些软件包属于要更新的​​软件包中影响了这个问题。

最后,在更新之后,脚本以原始形式运行,行rgdal保持不变。感谢那些帮助我解决这个问题的人。