mardi 15 mai 2012

Résultats du second tour: Nature du vote et Distance au littoral

Article en français

French elections: nature of votes versus distance to the coast : In the previous post, we saw how to make a simple choropleth of votes. Here, I detail how to create a dataviz combining a map and a standard xy plot to visualize the relation that exists between the nature of votes and the distance to the coast. A good opportunity to use a very interesting R library: spatstat.


 Dans le précédent post, nous avons vu comment ajouter les résultats du vote à de la donnée spatialisée afin d'aboutir à une petite choroplèthe des résultats:


Avant de réaliser l'article sur la réalisation d'une carte isarithmique et de partir en week-end prolongé :), je vous propose ici un petit article sur une méthode de représentation graphique de la relation existant entre la nature des votes et la distance séparant chaque commune au littoral.

Pour cela, dans un premier temps, il faut télécharger le trait de côte disponible sur le site du Service Hydrographique et Océanique de la Marine:


La représentation que nous allons voir se prête assez peu, en soi, à l'analyse mais elle nous permettra de voir comment utiliser la librairie spatiale R spatstat à travers le calcul de distance au plus proche voisin, et de voir l'affichage de graphiques.

Voici le code en entier. Les explications suivent par la suite:
 

Voici le résultat:
Nature du vote et distance au littoral

Le code expliqué:

Afin de déterminer la distance séparant chaque commune au trait de côte, on va utiliser la librairie spatstat. Celle-ci n'utilise pas les mêmes types d'objets que les librairies spatiales standardes, à savoir SpatialPoints/Lines/Polygones. Pour les points, elle définit la classe ppp et pour les lignes, la classe psp. On effectue en préalable une coercion des classes SpatialPoints/Lines vers ppp et psp afin de pouvoir utiliser les données spatiales dans spatstat.
tc <- readOGR("F:/DATAS/TRAIT_COTE/TCH.shp", "TCH")
tc.psp <- as(tc, "psp")
 
comm.pp <- SpatialPointsDataFrame(coordinates(comm2), data=comm2@data)
comm.pp <- as(comm.pp, "ppp")

Une fois cela fait, on peut alors utiliser la fonction nncross. Celle-ci permet de déterminer le voisin le plus proche (segment ou point) ainsi que la distance qui le sépare de ce dernier.
nn <- spatstat::nncross(comm.pp, tc.psp)

On peut regarder ce que cela donne au niveau des distances commune - littoral. Pour cela, on utilise la fonction spplot qui adapte les fonctions d'affichage graphique de la librairie lattice aux objets géographiques. C'est une autre possibilité d'affichage, en plus de la fonction de base plot vue dans le post précédent.
comm2$dist <- nn$dist
spplot(comm2, "dist", col=NA)


Distances entre chaque commune et le littoral
PS: on dirait du raster mais ça n'en est pas :)

Les données que l'on va utiliser pour les représentations suivantes sont:
- Les coordonnées xy des centroïdes de communes
- Le pourcentage de vote pour l'un et l'autre des candidats
- La distance de séparation commune - trait de côte

Nous allons créer un data.frame exprès pour cela, concentrant toutes ces informations:
df <- data.frame(pcsar=comm2$pc.sar, x=comm.pp$x, y=comm.pp$y, dist=nn$dist)

Attaquons-nous aux graphiques.

On va utiliser une couleur rouge pour les votes dominants de gauche et bleue pour ceux de droite (logique). Contrairement à avant, on n'utilisera pas de nuance liée au pourcentage. On intègre également une valeur de transparence de 10%.
alpha <- .1
cols <- rgb(ifelse(pcsar > .5, 0, 1), 0, ifelse(pcsar > .5, 1, 0), alpha)

Il n'y aura rien de nouveau au niveau du graphique géographique par rapport au post précédent, à part que l'on affiche des points et non des polygones. On superposera aussi le trait de côte.
plot(comm2.ctrd, col=cols, pch=16, cex=2, xlim=bb[1,], ylim=bb[2,])
plot(tc, col="white", lwd=4, add=TRUE)

C'est là, la partie nouvelle: à partir du data.frame appelé sobrement df, nous allons réaliser un plot x versus y assez standard. En x, nous aurons la distance séparant chaque commune de la côte, en y, la latitude et en couleur de point la nature du vote. Cette dernière sera donc la troisième dimension de ce graphique.
plot(dist, df$y, pch=16, cex=2, col=cols, xlab=NA, ylab=NA, axes=FALSE)

Le paramètre graphique par(mfrow=c(1,2)) a permis de mettre côte à côte le graphique géographique et le graphique xy. 
par(mfrow=c(1,2), bg="black")

 J'ai choisi de représenter les traits de la même couleur afin de pouvoir faire la relation entre les deux. En quelque sorte, pour aboutir au second graphique. C'est comme si on prenait la France et qu'on la dépliait, l'étendait selon son littoral.
abline(v=0, col="white", lwd=4)


Nature du vote et distance au littoral

Intéressant ou pas, à vous de voir! En tout cas, nous avons pu voir quelques fonctions bien sympathiques!
 
 

Aucun commentaire:

Enregistrer un commentaire