J'utilise ggplot2
pour créer une densité de population choroplèthe. Il fonctionne actuellement pour les états uniques, mais pas pour les multiples. Il semble que les densités de divers comtés (qui ont souvent le même nom) se confondent, et parfois même les comtés non-appariés sont mélangés entre les états. Par exemple, "New Jersey" donne les densités correctes, mais "New Jersey", "New York" me dit que le très peuplé comté d'Essex dans le New Jersey a une densité < 30p/mi^2. Pourquoi est-ce?Les comtés sont brouillés en 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
}
Pour utiliser,
popdensitymap("New Jersey")
popdensitymap("New York", "New Jersey")
Here is the csv. Il est très laid, mais je ne pas avoir accès à un système de partage de fichiers en ce moment.
Voici un exemple de sortie. Comme vous pouvez le voir, le très peuplé comté d'Essex par New York City est inexactement représenté.
EDIT: Here is my version of the CSV. Désolé pour le délai de dépôt.
Votre fichier csv ne se lit pas correctement. Il semble avoir un titre d'en-tête (?!) Et même si cela est supprimé, les noms de champs sont incorrects. – geotheory
@geotheory c'est étrange, ça marche bien pour moi. J'ai tout supprimé jusqu'à la ligne ,,,, 2010,2011, Nombre, Pourcentage, Nombre, Pourcentage, Densité de la Population, Zone (Milles Carrés) ,,,,, et les lignes en bas. –
Non reproductible. Si je copie, colle et fonctionne avec 'popdensitymap (" New Jersey ")' I get 'Erreur dans les données.frame (countydata $ X, countydata $ Population.Density): arguments impliquent un nombre différent de lignes: 3284, 0'. D'une part, il semble qu'il y ait une faute de frappe dans votre argument 'breaks' à' cut', la dernière valeur devrait être '10000' et non' 100000'? Par intérêt, le code fonctionne-t-il si vous le supprimez de la fonction? J'ai mis en place un choroplèthe pour vérifier et les données de population et les polygones de carte sont bien, c'est donc définitivement votre code. – SlowLearner