10 de octubro de 2019

A Cociña rápida

  • Simple
  • Moi rápida de facer
  • Utiliza poucos ingredientes diferentes que combinan para obter resultados de sabor moi diferentes
  • Fácilmente replicable
  • Visualmente atractiva
  • Con sabores que enganchan

A Cociña rápida de gráficos

  • Simple e rápida
  • Utiliza poucas instruccións diferentes que combinan para obter resultados visuais moi diferentes
  • Fácilmente replicable: moitos gráficos en pouco tempo
  • Visualmente atractiva
  • Con sabores que enganchan ???
  • Aprender un único sistema

A librería ggplot2

  • Permite de maneira sinxela crear gráficos complexos a partir dun conxunto de datos.
  • ggplot2 baséase na gramática de gráficos:
    • un conxunto de datos,
    • un sistema de coordenadas,
    • un conxunto de geoms (que determinan a representación visual dos datos)
  • A plantilla básica que pode usarse para distintos tipos de gráficos:

ggplot(data = datos, mapping = aes()) + geom_funcion()

A librería ggplot2

  • A función ggplot() úsase para vincular o gráfico a un conxunto de datos a través do argumento data
  • Para definir como se queren representar as variables faise a través do argumento mapping. Defínese empregando a función aes()

ggplot(data=datos,mapping=aes(x=Idade.Media,y=RDBph))

  • Agregar geoms para indicarlle como se representan os datos no gráfico (puntos, liñas, barras, …)

  • geom_point() para diagramas de dispersión
  • geom_boxplot() para diagramas de caixa
  • geom_bar() para diagramas de barras

A librería ggplot2

Para engadir un geom, emprégase o operador +

library(ggplot2)
datos=read.csv2("datos.csv",header=T,
                 fileEncoding = "windows-1252")
ggplot(data = datos, mapping = aes(x=Idade.Media,y=RDBph))+
  geom_point()

Gráfico de dispersión con ggplot2

head(datos[,c(1:10,15)])
            Nome Espazo cod_provincia provincia  Ano Poboacion RDBph
1 15001 Abegondo  15001            15  A Coruña 2016      5533 13726
2     15002 Ames  15002            15  A Coruña 2016     30544 15188
3   15003 Aranga  15003            15  A Coruña 2016      1982 10869
4     15004 Ares  15004            15  A Coruña 2016      5672 13369
5  15005 Arteixo  15005            15  A Coruña 2016     31239 13455
6    15006 Arzúa  15006            15  A Coruña 2016      6211 12862
  Idade.Media Indice.Envellecemento Pob_20_64 pens_hab
1       50.05                224.32     56.92  297.307
2       38.90                 49.14     65.26  118.026
3       55.04                501.61     52.36  378.406
4       47.20                164.98     58.81  234.661
5       41.37                 76.88     65.74  170.236
6       49.82                227.03     57.17  284.173

Gráfico de dispersión con ggplot2

ggplot(datos,aes(x=Idade.Media,y=RDBph))+
  geom_point(aes(color=provincia))

Gráfico de dispersión con ggplot2: + ingredientes

ggplot(datos,aes(x=Idade.Media,y=RDBph))+
  geom_point(aes(color=provincia))+geom_smooth()

Gráfico de dispersión con ggplot2 con interactividade

a=ggplot(datos,aes(x=Idade.Media,y=RDBph,text=Nome))+
  geom_point(aes(color=provincia))
ggplotly(a)

Gráfico de liñas con ggplot2: simple

datosSerie=read.csv2("datosSerie.csv",header=T,
                 fileEncoding = "windows-1252")
datosSerie[c(1:7,20:24),]
   Espazo     Nome  Ano Poboacion Pob_20_64 Indice.Envellecemento
1   15030 A Coruña 2006    243320     65.27                130.21
2   15030 A Coruña 2018    244850     59.51                146.28
3   15030 A Coruña 2012    246146     62.70                139.69
4   15030 A Coruña 2008    245164     64.94                132.53
5   15030 A Coruña 2002    242458     65.23                116.73
6   15030 A Coruña 2013    245923     62.10                141.02
7   15030 A Coruña 2003    243902     65.31                121.79
20  15036   Ferrol 2016     68308     58.68                179.66
21  15036   Ferrol 2002     79520     62.65                132.52
22  15036   Ferrol 2009     74273     62.16                154.95
23  15036   Ferrol 2017     67569     58.37                183.25
24  15036   Ferrol 2003     78764     62.67                139.12

Gráfico de liñas con ggplot2: simple

ggplot(datosSerie,aes(x=Ano,y=Indice.Envellecemento,color=Nome))+
  geom_line()

Gráfico de liñas con ggplot2: + ingredientes

ggplot(datosSerie,aes(x=Ano,y=Indice.Envellecemento,color=Nome))+
  geom_line()+geom_point()

Gráfico de liñas con ggplot2: + ingredientes

a=ggplot(datosSerie,aes(x=Ano,y=Indice.Envellecemento,color=Nome))+
  geom_line()+geom_point()
ggplotly(a)

Gráfico de liñas con ggplot2: + ingredientes

ggplot(datosSerie,aes(x=Ano,y=Indice.Envellecemento,color=Nome))+
  geom_line()+geom_point()+facet_wrap(~Nome,nrow=2)

Gráfico de liñas con ggplot2: + ingredientes

ggplot(datosSerie,aes(x=Ano,y=Indice.Envellecemento,color=Nome))+
  geom_line()+geom_point()+
  labs(title="Evolución do Índice de envellecemento 2002-2018")+
  labs(x="Periodo",y="Índice de envellecemento",color="Concello")

En R base?

xrange <- range(datosSerie$Ano)
yrange <- range(datosSerie$Indice.Envellecemento)
n=length(unique(datosSerie$Espazo))
plot(xrange, yrange, type="n", xlab="Ano",
ylab="Indice" )
colors <- rainbow(n)
linetype <- c(1:n)
plotchar <- seq(18,18+n,1)
j=1
for (i in unique(datosSerie$Espazo)) {
un <- subset(datosSerie, Espazo==i)
lines(un$Ano, un$Indice.Envellecemento, type="p", lwd=1.5,
lty=linetype[j], col=colors[j], pch=plotchar[j])
j=j+1
}
title("Índice de Envellecemento en Galicia")
legend(xrange[1], yrange[2], 1:n, cex=0.8, col=colors,
pch=plotchar, lty=linetype, title="Concello")

Mapas con ggplot2

  • ggplot2 permite facer mapas de coropletas
  • Os mapas de coropletas permiten unha mellor representación da distribución espacial dun fenómeno
  • Categorízase a variable en intervalos
  • A cada intervalo asígnaselle unha tonalidade
  • Emprégase o geom_polygon

Co ficheiro datos queremos representar o número de pensións por habitante nos concellos de Galicia

Mapas con ggplot2

Mapas con ggplot2

datos=read.csv2("datos.csv",header=T,
                 fileEncoding = "windows-1252")
concellos=readOGR("Concellos_314_F_region.shp",verbose=FALSE)
proj4string(concellos) <- CRS("+proj=utm +zone=29")
map=spTransform(concellos,CRS("+proj=longlat"))
map_df <- fortify(map,region="COD_MUN2")
datos2=datos[,c(1:2,15)]
names(datos2)[2]="id"
datos2$id=as.character(datos2$id)
map_df=left_join(map_df,datos2)
p.gal <-
  ggplot(map_df, aes(x = long, y = lat, group = group,text=Nome)) +
  geom_polygon(aes(fill = pens_hab), colour = "white", size = 0.1)+
  scale_fill_continuous(name="Pensións por habitante",
                        low = "#fff7ec", high = "#7F0000")
ggplotly(p.gal)

Máis mapas: mapas de fluxos de migración interna

datos=read.csv2("e_interna.csv")[,-1]
datos=arrange(datos,desc(emigrantes))
datos[1:10,]
   CodConcelloOrixe CodConcelloDestino emigrantes
1             15030              15058      13022
2             15030              15031      11269
3             15030              15005      10212
4             15036              15054       9898
5             15078              15002       9855
6             15058              15030       8031
7             15031              15030       7283
8             15030              15017       6977
9             15005              15030       6856
10            15054              15036       6329

Máis mapas: mapas de fluxos

Máis mapas: mapas de fluxos

Emprégase o geom_polygon e geom_segment

datos=read.csv2("e_interna.csv")[,-1]
concellos=readOGR("Galicia_concellos_313.shp")
map=spTransform(concellos,CRS("+proj=longlat"))
centros=coordinates(map)
map_df <- fortify(map,region="cod")
centros=data.frame(as.numeric(as.character(map@data$cod)),centros))
names(centros)=c("codigo","long","lat")
or.xy<- merge(datos, centros, by.x="CodConcelloOrixe", by.y="codigo")
names(or.xy)<- c("origin", "destination","emigrantes","oX", "oY")
dest.xy<-  merge(or.xy, centros, by.x="destination", by.y="codigo")
names(dest.xy)<- c("destination","origin",  "emigrantes", 
                   "oX", "oY", "dX", "dY")

a=ggplot(dest.xy[which(dest.xy$emigrantes>20),], aes(oX, oY))+
  geom_polygon(data= map_df, aes(long,lat, group=group),fill="gray30")+
  geom_segment(aes(x=oX, y=oY,xend=dX, yend=dY, alpha=emigrantes),col="red")
a

Máis mapas: mapas de fluxos

Destinos preferidos de migración interna

Máis mapas: mapas de fluxos

Emprégase o geom_polygon e geom_segment

ggplot()+
geom_polygon(data= map_df, aes(long,lat, group=group), fill="gray30")+
geom_segment(data=dest.xy,aes(x=oX, y=oY,xend=dX, yend=dY, 
                              color=indicador),
             arrow =arrow(length = unit(0.01, "npc")))+ 
  scale_colour_distiller(palette="Reds",direction=1, name="Indicador", 
                         guide = "colorbar") +
 labs(title="Destinos preferidos da migración interna")

Conclusións

Empregando ggplot2 podemos cociñar gráficos

  • Rápido

  • De xeito sinxelo engadindo ingredientes

  • Elegantes

  • Con sabores que enganchan ????

FIN

MOITAS GRAZAS