Creando un gráfico de Dispersión con ggplot2 (Scatterplot) Parte 1

Luego de tener una primera impresión de Ggplot2, de conocer sus conceptos básicos, y de haberlo instalado y cargado vamos a usarlo, empezaremos con los famosos gráficos de dispersión (Scatterplot en inglés).

Para los ejemplos aqui explicados se ha desarrollado una pequeña base de 100 observaciones, cada observación corresponde a un individuo (100 filas), a cada individuo se le mide 5 características o variables de interés (5 columnas), las variables medidas son: Altura, Peso, Genero, Edad y Nivel Socio-Económico (NSE), los datos pueden descargarlos aqui y guardarlos como un txt con el nombre Data.txt (recordar que R hace distinción entre mayúsculas y minúsculas).

Lo primero que debemos hacer es asegurarnos de que el directorio que este usando R sea donde tenemos guardados los datos, para ello utilizamos el comando «getwd()» que da como resultado la carpeta en la que está trabajando R, es decir, en esta carpeta buscará los archivos que le pidamos leer, así como guardará los archivos que generemos.

> getwd()
[1] "/home/nemo/Documentos"

Si deseamos cambiar el directorio de trabajo, (como en mi caso, pues tengo los datos en otra carpeta) utilizamos el comando «setwd()», de la siguiente manera

> setwd("/home/nemo/Documentos/Blog/Ggplot")

Luego debemos leer el archivo de datos, para esto usamos el comando «read.table()», en nuestro caso vamos a leer el archivo data.txt que tiene en su primer línea los encabezados de las variables (header= TRUE), y en el que las columnas están separadas por tabulaciones (sep=»\t»), y esto lo vamos a asignar a la variable datos (data<-); la sentencia queda de la siguiente forma:

> datos<-read.table("Data.txt", header = TRUE, sep = "\t")

El objeto «datos» creado, es un objeto de la clase «data.frame» (nombre con el cual R nombra a la base de datos o marco de datos), para ver la estructura de «datos» vamos a presentar los valores de las 4 primeras observaciones haciendo

> datos[1:4,]
  Altura Peso Genero Edad   NSE
1   1.38 77.5      M   10 Medio
2   1.41 76.3      F   10  bajo
3   1.40 73.2      F   10  bajo
4   1.39 80.5      M   10  bajo

Como había mencionado, las variables son Altura, Peso, Genero, Edad y NSE (Nivel Socio-Economico).

Bien, ahora sí, a usar ggplot2!! He escogido el gráfico de dispersión porque es excelente para empezar a familiarizarse con este paquete, los ejemplos serán desarrollados de las dos maneras en la que trabaja ggplot2, es decir con el comando básico qplot() (por quick plot o grafico rápido) y con el comando ggplot() que es más personalizable y por tanto versatil, pero pierde un poco de rapidez.

Gráfico de dispersión simple Altura vs Peso

Usando la función qplot, debemos especificar los siguientes argumentos: (x, y, data) donde “x” y “y” son las variables a representar en los ejes de coordenadas, variables que comúnmente (y es recomendado) pertenecen al data.frame que se especifica con el argumento “data”; nosotros vamos a realizar un gráfico Altura vs Peso, entonces la sentencia sería:

> qplot (Altura,Peso,data=datos)

y el gráfico resultante es:

Gráfico de dispersión simple Altura vs Peso

Usando el comando ggplot, para obtener el mismo gráfico el primer paso es crear el objeto “gráfico” de la siguiente manera «ggplot(data, aes(Altura, Peso), este comando no presenta ningún gráfico pues no se le ha insertado capa alguna, para decirle a ggplot que queremos que aumente una capa de puntos escribimos «+ layer( geom = ”point”)» o simplemente «+ geom_point()»

> ggplot(data=datos, aes(Altura,Peso)) + layer( geom ="point")
> ggplot(data=datos, aes(Altura,Peso)) + geom_point()

Gráfico de dispersión Altura vs Peso vs Género (color según Género)

Si se desea ver cómo se comporta la relación “altura” vs “peso” según el “género”, entonces además de ver en el «eje x» la altura, y en el «eje y» el peso, podemos hacer que el gráfico nos muestre puntos de diferente color, según el género correspondiente, para ello debemos agregar al gráfico la característica estética color (colour) asociada a la variable categórica “Genero”. Además se va a modificar la nomenclatura de los ejes a: eje y = Peso(Libras) y eje x = Altura(metros); estos cambios se los realiza de siguiente manera:

Usando qplot

> qplot(Altura,Peso,data=datos, colour=Genero,
+ xlab="Altura(metros)", ylab="Peso(libras)")

Usando ggplot

> ggplot(data=datos,aes(Altura,Peso))+
+ geom_point(aes(colour=Genero))+
+ xlab("Altura(metros)")+ylab("Peso(libras)")

Note que para aumentar la característica color y asociarla con la variable «Genero» se utiliza el comando aes(colour=Genero) mientras que para editar la etiqueta de los ejes, usamos xlab("Altura(metros)")+ ylab("Peso(libras)"), el gráfico resultante es:

Gráfico de Altura Vs Peso Vs Genero

Gráfico de dispersión Altura vs Peso vs Género (forma según Género)

Otra forma de visualizar el Género es utilizar la característica forma (shape) y asociarla con la variable «Genero», utilizando el comando aes(shape=Genero), el código final y el gráfico resultante son:

Usando qplot

> qplot(Altura,Peso,data=datos, shape=Genero,
+ xlab="Altura(metros)", ylab="Peso(libras)")

Usando ggplot

> ggplot(data=datos,aes(Altura,Peso))+
+ geom_point(aes(shape=Genero))+
+ xlab("Altura(metros)")+ylab("Peso(libras)")
Altura vs Peso vs Genero
 

En estos gráficos se puede ver que automáticamente se genera una leyenda en la parte derecha del mismo, la leyenda indica el color o la forma que corresponde a cada Género (recordemos que de esto se encarga la componente escala del paquete ggplot). Lastimosamente el tamaño de los símbolos (shape) no permite apreciar bien el gráfico, entonces debemos definir un nuevo tamaño utilizando el comando size, nuestro código queda de la siguiente manera:

> qplot(Altura,Peso,data=datos, shape=Genero,
+ size=I(2), xlab="Altura(metros)", ylab="Peso(libras)")
> ggplot(data=datos,aes(Altura,Peso))+
+ geom_point(aes(shape=Genero), size=2)+
+ xlab("Altura(metros)")+ylab("Peso(libras)")

Aquí algo importante, con el comando ggplot cuando utilizamos aes() le estamos diciendo a ggplot, que esa característica estética tiene alguna relación con los datos, por lo tanto el paquete automáticamente genera una leyenda para ello; mientras que si tenemos una característica estética fuera del aes(), (como el size=2 en este caso) ggplot no genera leyenda para ello; pueden probar esto en sus casas cambiando la linea por geom_point(aes(shape=Genero, size=2)+. Lo mismo sucede con qplot si en lugar de size= I(2) utilizamos solo size= 2 Bueno, con los cambios realizados, el gráfico resultante es:

Ggplot: Altura Vs Peso Vs Genero (Shape = Genero)

El próximo paso (algo obvio quizás) sería mezclar los colores y la forma al mismo tiempo, pero eso lo haremos en próximos post.

3 comentarios

3 pings

    • Favian en 2 marzo, 2016 a las 19:04
    • Responder

    Buenas tardes Nestor.
    Para pedirte de favor como se le haría para agregar la linea de tendencia con el ggplot2?

    Saludos mi estimado

    1. Que tal Favian, disculpa la demora, si no has resuelto la pregunta, pues si lo que buscas es una línea que cruce tus datos entonces debes usar algo como:
      p + geom_smooth(method='lm',formula=y~x)

  1. Bien, ahora sí, a usar ggplot2!! He escogido el gráfico de dispersión porque es excelente para empezar a familiarizarse con este paquete, los ejemplos serán desarrollados de las dos maneras en la que trabaja ggplot2, es decir con el comando básico qplot() (por quick plot o grafico rápido) y con el comando ggplot() que es más personalizable y por tanto versatil, pero pierde un poco de rapidez.

  1. […] como se dijo al final de esta entrada, se desea obtener un gráfico de dispersión que nos permita visualizar tres variables: Altura, […]

  2. […] Blog de Néstor Montaño Que la aleatoriedad les juegue a su favor « Creando un gráfico de Dispersión con ggplot2 (Scatterplot) Parte 1 […]

  3. […] 1.- Bases de la Gramática de los Gráficos (Background) 2.- Instalación del paquete ggplot2 3.- Creando un gráfico de Dispersión con ggplot2 (Scatterplot) Parte 1 […]

Deja un comentario

Tu email nunca se publicará.


Ir a la barra de herramientas