我使用ggplot2
创建人口密度等值线。目前它正在为单一状态工作,但不适用于多个状态。看起来,各个县(通常有相同的名称)的密度混杂起来,有时甚至是非名称匹配县也会混淆在各州之间。例如,“新泽西州”给出了正确的密度,但“新泽西州”,“纽约州”告诉我,新泽西州人口众多的艾塞克斯郡密度为< 30p/mi^2。为什么是这样?R县的县是
library(stringr)
library(ggplot2)
library(scales)
library(maps)
popdensitymap <- function(...){
path <- "U:/maps-county2011.csv"
states <- list(...)
countydata <- read.csv(path, sep=",")
countydata <- data.frame(countydata$X, countydata$Population.Density)
names(countydata) <- c("fips", "density")
data(county.fips)
cdata <- countydata
cdata$fips <- gsub("^0", "", cdata$fips)
countyinfo <- merge(cdata, county.fips, by.x="fips", by.y="fips")
countyinfo <- data.frame(countyinfo, str_split_fixed(countyinfo$polyname, ",", 2))
names(countyinfo) <- c('fips', 'density', 'polyname', 'state', 'county')
countyshapes <- map_data("county", states)
countyshapes <- merge(countyshapes, countyinfo, by.x="subregion", by.y="county")
choropleth <- countyshapes
choropleth <- choropleth[order(choropleth$order), ]
choropleth$density_d <- cut(choropleth$density, breaks=c(0,30,100,300,500,1000,3000,5000,100000))
state_df <- map_data("state", states)
density_d <- choropleth$density_d
choropleth <- choropleth[choropleth$state %in% tolower(states),]
p <- ggplot(choropleth, aes(long, lat, group=group))
p <- p + geom_polygon(aes(fill=density_d), colour=alpha("white", 1/2), size=0.2)
p <- p + geom_polygon(data = state_df, colour="black", fill = NA)
p <- p + scale_fill_brewer(palette="PuRd")
p
}
要使用,
popdensitymap("New Jersey")
popdensitymap("New York", "New Jersey")
Here is the csv.这是非常丑陋的,但我没有访问共享文件系统现在。
以下是输出示例。正如你所看到的,纽约市人口稠密的艾塞克斯郡的代表不准确。
编辑:Here is my version of the CSV.对不起,因为Dropbox延迟。
您的csv文件未正确读入。它似乎有一个标题标题(?!),即使删除了这些字段名称也是不正确的。 – geotheory
@geotheory这很奇怪,它适合我。我删除了所有',, 2010,2011,数量,百分比,数量,百分比,人口密度,面积(平方英里),,,,线和底部的线。 –
不可再生。如果我复制,粘贴并使用popdensitymap(“New Jersey”)运行''我得到'数据错误。帧(countydata $ X,countydata $ Population.Density): 参数意味着行数不同:3284,0'。首先,看起来你在'cut'的'breaks'参数中存在拼写错误,最后一个值应该是'10000'而不是'100000'?出于兴趣,如果你将它从功能中剥离出来,代码是否工作?我把一个choropleth检查和人口数据和地图多边形都很好,所以它绝对是你的代码。 – SlowLearner