2010-04-13 6 views
2

EDIT: J'ai réalisé la source de mon problème. Je n'ai que des informations de compte pour les comtés pour lesquels j'ai des données, ce qui est inférieur au nombre de comtés dans la zone contre laquelle je fais des complots.Problème de mappage de Choropleth dans R

Il va de soi que les lignes de problèmes de code sont ici:

mapnames <- map("county",plot=FALSE)[4]$names 
colorsmatched <- d$colorBuckets [na.omit(match(mapnames ,d$stcon))] 

Quelqu'un at-il des conseils sur la façon de générer un vecteur de la longueur appropriée qui est égal au nombre de comtés à New York, New Jersey, CT, et PA de la bibliothèque de cartes? Je veux fusionner les données de comptage que j'ai et inclure des zéros pour les comtés sur lesquels je n'ai pas d'informations.

Je suis en train de suivre le tutoriel décrit ici: http://www.thisisthegreenroom.com/2009/choropleths-in-r/

Le code ci-dessous exécute, mais il est soit ne correspond pas à mon jeu de données avec les données de maps_counties correctement, ou si elle ne comploter dans l'ordre que je voudrais attendre. Par exemple, les zones résultantes pour la grande région de New York ne montrent aucune densité tandis que les comtés aléatoires dans PA montrent la densité la plus élevée.

Le format général de ma table de données est:

county state count 
fairfield connecticut 17 
hartford connecticut 6 
litchfield connecticut 3 
new haven connecticut 12 
... 
... 
westchester new york 70 
yates new york 1 
luzerne pennsylvania 1 

Notez ces données est en ordre par l'état et le comté et comprend des données pour CT, NJ, NY, & PA.

Tout d'abord, je lis dans mon ensemble de données:

library(maps) 
library(RColorBrewer) 
d <- read.table("gissum.txt", sep="\t", header=TRUE) 

#Concatenate state and county info to match maps library 
d$stcon <- paste(d$state, d$county, sep=",") 

#Color bins 
colors = brewer.pal(5, "PuBu") 
d$colorBuckets <- as.factor(as.numeric(cut(d$count,c(0,10,20,30,40,50,300)))) 

Voici mon assortit

mapnames <- map("county",plot=FALSE)[4]$names 
colorsmatched <- d$colorBuckets [na.omit(match(mapnames ,d$stcon))] 

Traçage:

map("county" 
    ,c("new york","new jersey", "connecticut", "pennsylvania") 
    ,col = colors[d$colorBuckets[na.omit(match(mapnames ,d$stcon))]] 
    ,fill = TRUE 
    ,resolution = 0 
    ,lty = 0 
    ,lwd= 0.5 
) 
map("state" 
    ,c("new york","new jersey", "connecticut", "pennsylvania") 
    ,col = "black" 
    ,fill=FALSE 
    ,add=TRUE 
    ,lty=1 
    ,lwd=2 
) 

map("county" 
    ,c("new york","new jersey", "connecticut", "pennsylvania") 
    ,col = "black" 
    ,fill=FALSE 
    ,add=TRUE 
    , lty=1 
    , lwd=.5 
) 
title(main="Respondent Home ZIP Codes by County") 

Je suis sûr que je manque quelque chose re de base: l'ordre dans lequel la fonction des cartes trace les éléments - mais je n'arrive pas à le comprendre. Merci pour l'aide. S'il vous plaît laissez-moi savoir si vous avez besoin de plus d'informations.

Répondre

0

Voici une solution possible à votre problème en fusionnant vos données avec des données provenant de cartes d'états sélectionnés. Est ce que c'est ce que vous recherchiez?

library(maps); 
library(RColorBrewer); 

# Create Dummy Data Frame to Play With 

d = rbind(c('fairfield','connecticut',17),c('westchester','new york',70), c('luzerne','pennsylvania',1)); 
d = data.frame(d); 
names(d) = c("county", "state", "count"); 
d$count = as.numeric(as.character(d$count)); 
d$stcon = paste(d$state, d$county, sep=","); 

# Extract mapnames for States 

mapnames2 = map("county",c("new york","new jersey", "connecticut", "pennsylvania"),plot=FALSE)[4]$names; 
mapnames2 = data.frame(mapnames2); 
names(mapnames2) = "stcon"; 

# Merge with d 

d = merge(mapnames2, d, all = T); 
d$count[is.na(d$count)] = 0; 


# Color bins 
colors = brewer.pal(5, "PuBu"); 
d$colorBuckets = as.factor(as.numeric(cut(d$count,c(0,10,20,30,40,50,300)))); 

map("county" 
    ,c("new york","new jersey", "connecticut", "pennsylvania") 
    ,col = colors[d$colorBuckets] 
    ,fill = TRUE 
    ,resolution = 0 
    ,lty = 0 
    ,lwd= 0.5 
) 
map("state" 
    ,c("new york","new jersey", "connecticut", "pennsylvania") 
    ,col = "black" 
    ,fill=FALSE 
    ,add=TRUE 
    ,lty=1 
    ,lwd=2 
) 

map("county" 
    ,c("new york","new jersey", "connecticut", "pennsylvania") 
    ,col = "black" 
    ,fill=FALSE 
    ,add=TRUE 
    , lty=1 
    , lwd=.5 
) 
title(main="Respondent Home ZIP Codes by County") 
+0

C'était exactement ce dont j'avais besoin. Merci pour la réponse réfléchie! – Chase

Questions connexes