Skip to content

Instantly share code, notes, and snippets.

@datagistips
Created June 2, 2012 07:59
Show Gist options
  • Save datagistips/2857215 to your computer and use it in GitHub Desktop.
Save datagistips/2857215 to your computer and use it in GitHub Desktop.
Elections : votes and distance to the coast
## ATTENTION !!: l'utilisation de ce code nécessite d'avoir
# lancé le code précédent (https://gist.github.com/2857180) ,
# en gros d'avoir créé l'objet spatial comm2 avec les résultats du vote.
library(rgdal)
library(spatstat)
library(maptools)
## COERCING DATA for SPATSTAT ##
# on lit le trait de côte téléchargé depuis
# http://www.shom.fr/fr_page/fr_prod_num/tch_telecharg.html
tc <- readOGR("F:/DATAS/TRAIT_COTE/TCH.shp", "TCH")
# on coerce le SpatialLinesDataFrame object
# en classe psp exploitable dans spatstat
tc.psp <- maptools::as(tc, "psp")
# on crée la couche des centroïdes
comm.pp <- SpatialPointsDataFrame(coordinates(comm2), data=comm2@data)
# on coerce en classe ppp exploitable dans spatstat
comm.pp <- maptools::as(comm.pp, "ppp")
## COMPUTING NEAREST DISTANCE ##
# on détecte le segment ainsi que la distance de séparations
# les plus proches de chaque centroïde
nn <- spatstat::nncross(comm.pp, tc.psp)
## DISTANCE DISPLAY ##
# on regarde ce que cela donne au niveau des distances commune - littoral
comm2$dist <- nn$dist
spplot(comm2, "dist", col=NA)
## NEW DF ##
# on crée, par accomodation, un nouveau data frame
df <- data.frame(pcsar=comm2$pc.sar, x=comm.pp$x, y=comm.pp$y, dist=nn$dist)
# on utilise la fonction attach appliquée au data frame afin de pouvoir utiliser
# les colonnes de ce dernier comme de simples variables (évite d'écrire df$ à chaque fois)
attach(df)
## MAP CENTROIDS ##
# on détermine les centroïdes des communes
comm2.ctrd <- SpatialPoints(coordinates(comm2))
bb <- bbox(comm2.ctrd)
## PLOT ##
## COULEURS ##
alpha <- .1
# si mr sarkozy l'emporte, on crée un code couleur rgb(0,0,1) correspondant au bleu
# si c'est mr hollande, on crée un code couleur rgb(1,0,0) correspondant au rouge
# les nuances liées au pourcentage de vote n'apparaissent pas. Seule apparaît la nature du vote dominant.
cols <- rgb(ifelse(pcsar > .5, 0, 1), 0, ifelse(pcsar > .5, 1, 0), alpha)
## DISPLAY ##
# on mettra un plot géographique sur la gauche et un plot x vs y sur la droite
par(mfrow=c(1,2), bg="black")
# plot géographique
plot(comm2.ctrd, col=cols, pch=16, cex=2, xlim=bb[1,], ylim=bb[2,])
plot(tc, col="white", lwd=4, add=TRUE)
## X(distance à la côte) vs Y(latitude) PLOT
plot(dist, y, pch=16, cex=2, col=cols, xlab=NA, ylab=NA, axes=FALSE)
# on rajoute une ligne blanche sur le côté de ce plot
# afin de faire la relation avec le trait de côte précédent
abline(v=0, col="white", lwd=4)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment