library(rgdal)
library(RArcInfo)
library(RColorBrewer)
library(maptools)
library(maps)
library(classInt)
我们加载csv文件,清理它并创建Id2和失业的子集
data<- read.csv('allegheyny socioeconomic info.csv',dec='.',
header=T)
data$Id2<-as.numeric(as.character(data$Id2))
data$Percent.Unemployed<-as.numeric(as.character(data$Percent.Unemployed))
names(data)[names(data)=="Percent.Unemployed"]<-'unemployed'
data1<-subset(data, select= c('Id2', 'unemployed'))
加载2010年阿勒格尼县人口普查区的形状文件
tracts<-readShapePoly("census tract allegheyny 2010.shp")
names(tracts)[names(tracts)=="GEOID10"]<-'Id2'
tr1<-merge(data1,tracts)
sort(tr1$Id2)
colours<-brewer.pal(5, 'Greens')
breaks<- classIntervals(tr1$unemployed, n=5, style='sd')
plot(tr1, col=colours[findInterval(tr1$unemployed, breaks, all.inside=T), axes=F])
这是我得到的信息:
Error in x[-1L] >= x[-n] : comparison of these types is not implemented
答案 0 :(得分:1)
plot(tracts,col=colours[findInterval(tr1$unemployed, breaks$brks, all.inside=T)])
产生这个:
具体回答你的问题:
错误的原因是findInteerval(...)
将第二个参数作为数字向量。但
breaks<- classIntervals(tr1$unemployed, n=5, style='sd')
生成一个包含两个元素的列表:'var'和'brks'。您需要在breaks$brks
中使用findInterval(...)
。
您的陈述
plot(tr1, col=colours[findInterval(tr1$unemployed, breaks, all.inside=T), axes=F])
尝试绘制tr1
,它不是地图,它是一个包含402行的数据框。您需要plot(tracts,...)
最后,为什么你认为在ggplot中添加图层很困难?