Python >> Tutoriel Python >  >> Python

Tracer une carte de couleurs avec des codes postaux en R ou Python

Je suppose que vous voulez des cartes statiques.


(source :eduardoleoni.com)

1) Obtenez les fichiers de formes des limites postales et des limites des états sur le sitecensum.gov :

2) Utilisez la fonction plot.heat que j'ai postée dans cette question SO.

Par exemple (en supposant que vous ayez les fichiers de formes maryland dans le sous-répertoire map):

library(maptools)
##substitute your shapefiles here
state.map <- readShapeSpatial("maps/st24_d00.shp")
zip.map <- readShapeSpatial("maps/zt24_d00.shp")
## this is the variable we will be plotting
[email protected]$noise <- rnorm(nrow([email protected]))
## put the lab point x y locations of the zip codes in the data frame for easy retrieval
labelpos <- data.frame(do.call(rbind, lapply([email protected], function(x) [email protected])))
names(labelpos) <- c("x","y")                        
[email protected] <- data.frame([email protected], labelpos)
## plot it
png(file="map.png")
## plot colors
plot.heat(zip.map,state.map,z="noise",breaks=c(-Inf,-2,-1,0,1,2,Inf))
## plot text
with([email protected][sample(1:nrow([email protected]), 10),] , text(x,y,NAME))
dev.off()

Il existe de nombreuses façons de le faire dans R (voir la vue spatiale); beaucoup d'entre eux dépendent du package "maps".

  • Découvrez cet exemple sympa de l'élection américaine de 2004. Ça finit par ressembler à ça :

  • Voici un exemple un peu moche d'un modèle qui utilise le package "maps" avec "lattice".

  • Andrew Gelman a fait de très belles intrigues comme celle-ci. Voir, par exemple, cet article de blog sur les états rouges/bleus et cet article de suivi.
  • Voici un exemple très simple utilisant le package "gmaps", qui affiche une carte des arrestations par état pour les arrestations pour 100 000 pour meurtre :

    require(gmaps)
    data(USArrests)
    attach(USArrests)
    grid.newpage()
    grid.frame(name="map")
    grid.pack("map",USALevelPlot(states=rownames(USArrests),levels=Murder,col.fun=reds),height=unit(1,'null'))
    grid.pack("map",gradientLegendGrob(at=quantile(Murder),col.fun=reds),side="bottom",height=unit(.2,'npc'))
    detach(USArrests)
    

Quelqu'un a peut-être quelque chose de plus direct pour vous, mais j'ai trouvé "Data Mashups in R" d'O'Reilly très intéressant... en partie, c'est une cartographie spatiale des enchères de saisie immobilière.

http://oreilly.com/catalog/9780596804770/