Redistribución da poboación en Galicia: 1900-2011
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNRMH6FDkS1Inc2zdVfRrdVUY2BegZCQRfipniJfuIH7LjiLr8B9w21htgOQ-HbSlNfNulQ6bco9KaxVIuS5DAxCat6bVw7xq0prJPjwqbfjmbjMi6nIxq83iLmXI0ISYkw4rpgWKyCb0/s640/mapa.gif)
(pulsa na animación para vela a tamaño completo)
A animación foi realizada con R e ImageMagick. Os datos de partida foron un mapa vectorial dos concellos de Galicia e datos históricos de censo de poboación (accesibles no Instituto Nacional de Estadística)
Despois de introducidos, os datos tiñan este aspecto:
head(poboacion)
codigoine concello X1900 X1910 X1920 X1930 X1940 X1950 X1960 X1970 X1981 X1991 X2001 X2011 sup1996
1 15001 Abegondo 7376 7604 7776 8238 8890 8202 7335 6302 5912 5448 5729 5699 83.9
2 15002 Ames 7097 7271 7334 7602 9153 9425 9597 9833 9166 9864 18782 29106 80.0
3 15003 Aranga 4710 4512 4673 4980 5005 4618 4072 3187 2685 2490 2314 2070 119.6
4 15004 Ares 4209 4537 4488 4850 5671 4724 5033 5042 4529 4447 5003 5774 18.3
5 15005 Arteixo 9629 9539 9304 9905 10528 10471 10887 12166 15268 17934 23306 30630 93.4
6 15006 Arzúa 9036 8708 8722 8743 10396 10754 10470 9064 6999 6932 6633 6304 155.4
Creamos tamén unha táboa de datos coa densidade de poboación en cada ano, e unha táboa adicional co logaritmo da anterior
densidade <- poboacion[,3:14] / poboacion$sup1996
densidade.log <- log(densidade)
O proceso require da utilización de varios paquetes de R:
require(maptools)
require(rgdal)
require(RColorBrewer)
require(classInt)
A continuación cargamos en R o mapa vectorial, e creamos un campo 'codigoine' a partir dos códigos de provincia e municipio
mapa.municipios<-readOGR("./cartografia","DATOS_S_CONCELLOS_polygon")
mapa.municipios@data<-cbind(mapa.municipios@data, codigoine=mapa.municipios@data$CDPROVI*1000+mapa.municipios@data$CDMUNI)
Establecemos unha paleta de cores baseados no laranxa, a partir dos dispoñibles en ColorBrewer.
cores <- brewer.pal(9,"Oranges")
Creamos unha función que divida as observacións de poboación de cada ano en rangos fixos.
clases.f <- function(x) {
classIntervals(x,
9,
style="fixed",
fixedBreaks=log(c(0.1,10,20,50,150,400,1000,3000,9000)))
}
Obtemos as coordenadas dos centroides dos concellos.
long<-coordinates(mapa.municipios)[,1]
lat<-coordinates(mapa.municipios)[,2]
Extraemos os anos a partir dos nomes das columnas na táboa 'poboacion'
anos <- substr(colnames(poboacion)[3:14],start=2,stop=5)
Creamos unha función 'mapa' que crea un ficheiro png de 800x600 píxeles co nome 'mapaxxxx.png' (onde xxxx é o ano).
mapa <- function(x) {
png(filename=paste("mapa",x,".png",sep=""),
width=800, height=600,
units="px",
bg="transparent") # Activa un dispositivo png onde pegar o gráfico resultante
orde<-match(mapa.municipios@data$codigoine,
poboacion$codigoine) # Establece a orde dos concellos na táboa de atributos do mapa vectorial
par(mar=c(5,1,4,1)+.1) # Axustamos as marxes do gráfico
clases <- clases.f(densidade.log[orde,x]) # Aplica a función 'clases.f' definida máis arriba sobre o logaritmo da densidade de poboación
clases.cor <- findColours( clases, cores )
tamaño <- sqrt(poboacion2[orde,x] / 1500 ) # Establecemos o tamaño dos puntos a partir do tamaño da poboación
plot(mapa.municipios, col="white", lwd=.5, border="grey")
title(main=anos[x],
sub="(Elab. a partir de datos censais)",cex.main=2,cex.sub=1.5)
points(long, lat,
pch=19,
bg=clases.cor,
col=clases.cor,
cex=tamaño)
legend(395000,4800000,
legend=c("[0,10)","[10,20)","[20,50)","[50,150)","[150,400)","[400,1000)","[1000,3000)",">3000"),
fill=attr(clases.cor,"palette"),
bty="n",title="hab / km²",
cex=1.5)
points(410000,4680000,pch=19,bg="grey",cex=1)
text(425000,4680000,"1500 hab",pos=4,cex=1.5)
points(410000,4665000,pch=19,bg="grey",cex=5.16)
text(425000,4665000,"40000 hab",pos=4,cex=1.5)
points(410000,4640000,pch=19,bg="grey",cex=8.16)
text(425000,4640000,"100000 hab",pos=4,cex=1.5)
dev.off()
}
Xeramos os diferentes mapas empregando un bucle.
for(x in 1:12) {
mapa(x)
}
Finalmente, o gráfico de animación foi xerado coa orde seguinte orde de imagemagick:
convert -delay 120 -loop 0 mapa*.png mapa.gif
Ola!
ResponderEliminarCaín aquí porque ando na procura dun mapa dos concellos de Galicia igual ó que supoño empregaches ti para este proxecto (por certo, ¡bo traballo! Pareceume bonito, e aprendín un par de trucos útiles). Preguntábame se poderías indicarme onde o atopaches, porque andiven buscando polas webs da Xunta e demás sen moito éxito.
Graciñas! :)
Este comentario ha sido eliminado por el autor.
ResponderEliminarOla! Gracias polo comentario.
ResponderEliminarO mapa que empregamos neste exercicio foi descargado da web do Servizo de Información Ambiental (SIAM) da Xunta de Galicia hai uns anos. A distribución das webs cambiou desde entón, e o entramado de páxinas da CMATI, IET, SITGA, etc. é especialmente eficiente en impedir o acceso de información.
Non obstante, no centro de descargas do Instituto Geográfico Nacional [1] (require rexistrarse como usuario) podes obter o mapa de concellos de toda España (líneas límite municipales), do que non che será difícil extraer os de Galicia.
A modo de curiosidade, unha fonte útil para localizar límites administrativos de moitos países do mundo (a miúdo, pero non sempre, baseada nas fontes oficiais respectivas), é o proxecto "Global Administrative Areas" [2]. Os mapas que se descargan teñen normalmente diferentes niveis administrativos, desde o de Estado ata a división local.
[1] http://centrodedescargas.cnig.es/CentroDescargas/inicio.do
[2] http://www.gadm.org/