Gráficas de Puntos. Dispersión

Libreria

  • ggplot

Datos

cvTemps.csv, son las temperaturas diarias mínimas, medias y máximas registradas durante tres años (1980-1981) en Tepetates, Veracruz. la tabla contiene seis variables (= columnas): YR el año, M el mes, DJ el día juliano y los tipos de temperatura Tmin, Tmedia y Tmax .

sismos.csv, son registros de los sismos ocurridos en México en un período de tiempo.

tabladc.csv, son conteos mensuales de adultos de Diaphorina citri en la ciudad de Cuitláhuac, Ver (Hernandez-Landa et al. 2013). Los datos se encuentran georeferenciados.

Los archivos se encuentran aquí:

https://sites.google.com/site/digitcognem/workfiles

Ejemplo 1. Gráfica traslapada con tres categorías

Para poder hacer las gráficas compuestas es necesario considerar YR y M como caracteres, así que es necesario transformar estas columnas a cadenas de caracteres con la función factor():

cvTemps$YR<- factor(cvTemps$YR)

cvTemps$M<- factor(cvTemps$M)

Aquí se generan las gráficas sobrepuestas de los tres años, con diferentes símbolos (shape=YR) y colores, colour= YR.

sc1<- ggplot(cvTemps, aes(Tmin, Tmedia, colour= YR)) + geom_point(aes(shape= YR), size= 6, alpha= 0.7)

Ejemplo 2. Gráfica Compuesta por años

Una version alternativa es separando por año, para esto se emplea facet_grid(~.YR), se añade el fondo blanco theme_bw():

sc2<- ggplot(cvTemps, aes(Tmin, Tmedia, colour= YR)) + geom_point(aes(shape= YR), size=6, alpha= 0.7) + facet_grid(YR~.) + theme_bw()

Se puede mejorar la presentación ajustando un modelo lineal con la instrucción geom_smooth(method= lm), esto genera una linea recta para cada serie de puntos y una banda de color que indica un intervalo de confianza al 95%.

sc2b<- ggplot(cvTemps, aes(Tmin, Tmedia, colour= YR)) + geom_point(aes(shape=YR), size=6, alpha= 0.7) + facet_grid(YR~.) + geom_smooth(method= lm)+ theme_bw()

Ejemplo 3. Gráfica Compuesta por año y mes

Se puede disgregar la gráfica para hacer los paneles por mes y año, cambiando la instrucción en facet_grd(M~YR):

sc3<- ggplot(cvTemps,aes(Tmin,Tmedia, colour=YR)) + geom_point(aes(shape=YR), size=6, alpha= 0.7) + facet_grid(M~YR) + geom_smooth(method= lm)+ theme_bw()

Ejemplo 4. Generar una función kernel en dos dimensiones

En este caso, se emplea las figuras por año y para una de ellas se ordena generar una gráfica de densidad en dos dimensiones con la instrucción geom_density2d(aes(colour=YR), size= 1), que aplica colores por año y la linea tiene grosor 1. Observe que ahora el facetado es horizontal:

fieden<-ggplot(cvTemps, aes(Tmin, Tmedia)) + geom_point(alpha=0.7, aes(colour=YR), size=6) + geom_density2d(aes(colour=YR), size=1) + facet_grid(~YR) + theme_bw()

Ejemplo 5. Gráficas de densidad

En este ejemplo se construye una gráfica de densidad con celdas hexagonales, empleando geom_hex(),el color en la celda representa el número de observaciones en dicho espacio. Sirven para sintetizar la información de gráficas de dispersión. El ejemplo se construyó con los datos georeferenciados de sismos en México.

hxsism<-ggplot(sismos,aes(longitude,latitude)) + geom_hex(colour='black') + theme_bw() + scale_fill_gradient(low="#FFFFCC", high="#B80000")

Observe que se pide colorear el borde de la celdas con colour='black' dentro de geom_hex(), asimismo, se establece una escala de colores personalizada con scale_fill_gradient(), donde low and high son los valores de los colores en los extremos de la escala de colores.

Otra manera de graficar los puntos es mediante el cálculo de la densidad kernel en dos dimensiones:

sismD<-ggplot(sismos,aes(longitude,latitude)) + stat_density2d(aes(fill=..level..), geom= 'polygon', colour='black') + theme_bw() + scale_fill_gradient(low= "#FFFFCC", high= "#B80000")

La diferencia con la gráfica de gradiente del ejemplo 4, es que aquí se pide que se rellenen los contornos con geom='polygon'

Estos tipos de gráficas son convenientes cuando se quieren representar numerosos puntos en el plano cartesiano.

Ejemplo 6. Gráficas de puntos de tamaño variable

Este tipo de gráficas se genera cuando se tienen no solamente una serie de puntos X, Y sino que se tienen lecturas de una tercera variable Z, la cual se puede asociar a los puntos cartesianos para darle una dimensión al tamaño de los puntos.

En este caso se presentan las lecturas de colectas de Diaphorina citri (z) en trampas georefrenciadas (x, y). Es decir, las trampas se geo-referenciaron en coordenadas geográficas. Los datos corresponden al trabajo de Lizbeth Hernandez-Landa et al. 2012. Acta Zool. Mex. 29:334-345.

La figura compuesta, que presenta las capturas (z) en el plano geográfico, a través de los meses, se genera con las instrucciones:

xyz1<- ggplot(tabladc,aes(longitud, latitud)) + geom_point(aes(size= Conteo)) + facet_wrap(~Mes) + theme_bw()+ theme(axis.text= element_text(size= 12), axis.title= element_text(size= 16), legend.title = element_text(size= 16), legend.text = element_text(size = 12))

scatter with size

Observe que en geom_point() la instrucción size=Conteo hace que ggplot asigne el símbolo de tamaño variable a los puntos georeferenciados.

Sin embargo, existen el problema que las etiquetas de los ejes x se traslapan y los de y estan aglomerados. Por lo tanto, para el eje x las etiquetas se van a espaciar a mayor distancia y se van a poner verticales, en el caso de las etiquetas de y se van a distanciar unicamente. En ambos casos, se define una función que reduce el número de decimales, sprintf() es una función básica de R que regresa un número con cierto número de valores decimales, en el ejemplo son dos decimales:

scaleFUN <- function(x) sprintf("%.2f", x)

Ahora se puede ajustar las escalas:

xyz1 + theme(axis.text.x = element_text(angle=90, vjust=0.5)) + scale_y_continuous(breaks= c(18.81,18.83), labels= scaleFUN) + scale_x_continuous(breaks=c(-96.73, -96.72), labels= scaleFUN)

Una manera alternativa de graficar las plantas de Murraya paniculata con los insectos de D. citri es indicar las plantas que no tuvieron al insecto (Conteo = 0) con los que si tuvieron. Para esto es necesario separar la tabla en dos subconjuntos, uno con conteos positivos (Conteo > 0) y el otro con cero conteos:

s1<- tabladc[tabladc$Conteo>0,]

s0<- tabladc[tabladc$Conteo<=0,]

s1 es el subconjunto con los registros de D. citri mayores a cero, mientras que s0 son los registros con los conteos igual a cero. Hay que hacer una gráfica compuesta con dos geom_point(), uno para s1 y el otro para s0:

xyzB<- ggplot(s1,aes(longitud, latitud)) + geom_point(aes(size= Conteo),alpha=0.7) + facet_wrap(~Mes) + theme_bw()+ geom_point(data=s0,shape= 1, size = 3) + theme(axis.text= element_text(size= 12), axis.title= element_text(size= 16), legend.title = element_text(size= 16), legend.text = element_text(size = 12)) + scale_size_continuous(range=c(3,7))

En las instrucciones anteriores, s1 es el conjunto de datos base, asociado a geom_poin(aes(size=Conteo), alpha= 0.6), observe que el segundo geom_point(data=s0, shape= 1, size =3), contiene al conjunto de datos con cero conteos, indicado con el símbolo 1 y de tamaño 3. El tamaño relativo de los círculos para el conjunto s1 se representa con la instrucción scale_size_continuous(range= c(3, 7)) que hace variar el tamaño de los puntos de tres a siete.

Finalmente, se añaden las instrucciones para reducir decimales y espaciamiento entre etiquetas, asi como la orientación de las mismas para el eje de las x:

xyzB + theme(axis.text.x = element_text(angle=90, vjust=0.5))+ scale_y_continuous(breaks=c(18.81,18.83),labels=scaleFUN) + scale_x_continuous(breaks=c(-96.73, -96.72),labels=scaleFUN)

Ahora queda claro que en los círculos blancos no hubo capturas de D. citri y en el resto, las capturas dependen del tamaño del círculo. Se añadió alpha=0.6 para mostrar un nivel de transparencia y distinguir todos los puntos.

Los códigos de los símbolos son: