Curso R Biociencias: Sesión 3 — Haciendo gráficos

En la clase de hoy empezaremos practicando lo de la clase pasada con un set de datos en común, para después dedicar la mayor parte de la clase aprendiendo a hacer gráficas en R.

Recordando:

  • Las funciones y sus argumentos son las herramientas principales que nos permiten hacer análisis y procesamientos en los datos.
  • Las funciones y sus argumentos siempre se llaman en el siguiente formato: nombreDeLaFuncion(argumento1 = respuesta1, argumento2 = respuesta2, argumento3 = respuesta3, …).
  • Los argumentos necesariamente deben llevar una respuesta.
  • Podemos llamar a la ayuda de las funciones de las siguiente formas: 1) usando ?nombreDeLaFuncion, o 2) help(nombreDeLaFuncion).
  • Una de las maneras mas usadas para importar datos en R es 1) preparar una tabla de datos en una hoja de calculo, 2) guardarla como archivo tipo csv en algún directorio (folder, carpeta), 3) seleccionar dicho directorio como nuestro directorio de trabajo (menu Session -> Set Working Directory -> Choose Directory, o con la función setwd() ), 4) e importarl
    a usando la función read.csv().
  • Podemos usar R de manera similar a una calculadora científica para realizar operaciones aritméticas, se pueden usar objetos como escalares o vectores en estas operaciones, y guardar los resultados en un objeto.
  • Nos referiremos a partes especificas (p ej. columnas de un data frame) de un objeto usando el símbolo $ para delimitar la parte deseada (p ej. objeto$columna).
  • Otra manera o que incluso funciona junto con la anterior es usar corchetes [] indicando la posición o posiciones deseadas, usando el número o números de los elementos para vectores o la(s) fila(s) y la columna(s).
  • Cuando se usan corchetes se pueden especificar condiciones para seleccionar los elementos (en un vector) o las filas (en un data frame) que cumplan con ciertos criterios. P ej. objeto[objeto$columna > 50, ]

Una práctica para usar la selección de datos en funciones

Usaremos el set de datos de iris, uno de los sets de datos de ejemplo que R ya trae consigo. Para cargarlo usa:

data(iris)

Esto creo un objeto llamado iris, de tipo data frame. Puedes observar una parte del objeto usando head(iris) que muestra las primeras 5 filas del data frame. O usando el visor de data frames de Rstudio. Este set de datos esta compuesto de observaciones de la longitud (Length) y ancho (Width) tanto del sépalo (Sepal) y pétalo (Petal) para 3 especies (Species) de plantas del género iris: setosa, versicolor y virginica. Si quieres saber mas información de este set de datos busca la ayuda de iris (p ej. ?iris). Puedes darte mas idea de
los valores de estas variables usando summary(iris), función que al aplicarla en un vector data frame devuelve datos de estadística descriptiva.

Usando este set de datos, realiza los siguientes ejercicios para practicar cómo seleccionar datos específicos de un objeto:

  1. Muestra en la consola todos los datos de la columna Sepal.Length
  2. Calcula la media de la columna Sepal.Length
  3. Muestra en la consola todos los datos de las columnas 2, 3 y 4.
  4. Muestra en la consola todos los valores de la fila 65.
  5. Guarda el valor de la fila 25 y columna 2 en un objeto llamado valor25x2 .
  6. Muestra en la consola todos los datos para la especie setosa.
  7. Muestra solo los datos de Petal.Length para la especie setosa
  8. Obtén el promedio de los datos de Petal.Length para la especie setosa y guárdalo en un objeto llamado promPetLSetosa .

Las respuestas se pondrán al final de este post, pero trata de hacer los ejercicios por ti mismo y solo usa las respuestas para corroborar que lo hiciste bien.

Gráficas en R

En los paquetes que vienen incluidos en la instalación de R hay dos tipos de funciones que nos ayudan a hacer gráficas: funciones que hacen la gráfica y funciones que agregan elementos a la gráfica. Ademas existen parámetros que nos permiten modificar prácticamente cada aspecto de los gráficos.

Entre las funciones que nos permiten hacer gráficas están:

  • plot(), función para hacer gráficos de dispersión, aunque también puede permitir realizar otros tipos de gráficos.
  • boxplot(), hace gráficos de cajas y bigotes (boxplots en ingles).
  • hist(), hace histogramas.
  • pie(), hace gráficas circulares o de pastel
  • stripchart(), hace gráficas de dispersión de puntos
  • dotplot(), gráficos de puntos tipo Cleveland
  • pairs(), matriz de gráficos de dispersión
  • plot.ts(), gráficos de series de tiempo
  • contour() y image(), gráficos de 3 variables en 2 dimensiones.
  • persp(), gráficos de superficie 3D

En la clase solo veremos las funciones plot(), hist() y boxplot().

Entre las funciones que nos permiten añadir elementos a los gráficos están:

  • points(), para añadir puntos
  • lines(), para añadir lineas
  • text(), para agregar texto
  • segments(), para dibujar lineas entre dos coordenadas
  • abline(), para dibujar rectas
  • title(), agrega títulos y subtítulos
  • rug(), agrega pequeñas marcas en los ejes para indicar donde hay datos
  • rect(), agrega un rectángulo
  • polygon(), agrega un poligono
  • legend(), agrega una leyenda
  • axis(), agrega un ejes a la gráfica

Vamos a probar usando la función plot(). Tomate un tiempo para leer la ayuda de esta función. Siempre que consultes la ayuda trata de identificar que argumentos tienen un valor por default, cuáles son los argumentos mínimos para que la función corra, y cuáles son algunos argumentos interesantes de personalizar de acuerdo a nuestras necesidades. Veremos que el argumento mínimo para que funcione es x, y prácticamente todos los demás son opcionales pero interesantes.

Haremos un gráfico de la variable Sepal.Length contra Sepal.Width.

plot(x= iris$Sepal.Length, y = iris$Sepal.Width)

Trata ahora de hacer un gráfico de las variables Petal.Length contra Petal.Width, agrega titulo, subtitulo, titulo al eje x y al y, y usa el tipo de gráfico de solo puntos. Usa la ayuda cuando tengas duda. La respuesta también la pondré al final.

Agregando elementos a las gráficos

Ahora agregaremos algunos elementos a la gráfica que ya tenemos (Petal.Length contra Petal.Width). Tratemos agregando puntos y lineas rectas. Ya habrás adivinado que usaremos las funciones points() y abline().

Vamos a añadir 4 puntos alrededor del valor 6 de la variable Petal.Length y 0.5 de Petal.Width. Revisa primero la ayuda de points() para ver que argumentos necesitamos. Te habrás dado cuenta que lo principal que necesitamos son las coordenadas en x y y de los puntos, y pueden ser en escalares (si solo es un punto) o en vectores (para agregar varios puntos).

points(x = c(6, 6.2, 6.3, 5.8), y = c(0.4, 0.6, 0.3, 0.5))

Una pequeña pregunta. ¿Por qué usamos c() dentro de los argumentos x y y?. La respuesta es que a ese argumento se le pueden introducir vectores como respuesta, así los puntos que nos gráfico corresponden a las coordenadas del elemento 1 del vector en x y el elemento 1 del vector y, al segundo elemento de x y el segundo de y, y así sucesivamente.

Ahora que estas familiarizado con la función points, agrega 5 puntos alrededor de las coordenadas 2 de Petal.Length y 2 de Petal.Width. La respuesta la pondré al final.

Ahora usaremos abline() para agregar lineas rectas. Primero veamos la ayuda para entender qué argumentos son necesarios. Vamos a hacer primero una linea recta horizontal que pase por el valor 1 de Petal.Width. Al leer la ayuda habrás entendido que podemos agregarla de la siguiente manera:

abline(h = 1)

Trata de agregar una linea que tenga por intercepto -0.36 y por la pendiente 0.42. Ver respuesta al final.

Bueno, ya hemos entendido como funciona la función plot() para hacer gráficos de dispersión y las funciones points() y abline() para agregar puntos y lineas rectas y lo hemos puesto un poco en practica.

Modificando parámetros del gráfico

Los parámetros de los gráficos nos permitirán modificar prácticamente todo detalle de los gráficos. Para ver una lista completa de los parámetros posibles checa la ayuda de la función par(), date el tiempo de revisarla para que te des una idea de las posibilidades que ofrecen. Algunos que yo considero interesantes son: bg, bty, family, font, lty, lwd, mfcol, mfrow, pch. Revisa al menos estos que menciono. Los parámetros se pueden usar como argumento dentro de cualquier función que haga gráficas o que agregue elementos a la gráfica. Ademas pueden usarse antes de iniciar una gráfica usándolos como argumentos de la función par(), así la gráfica generada posteriormente ya tendrá esas opciones que elegimos. Vamos a probar algunos de ambas maneras.

# Una gráfica modificando el símbolo con pch y usando la familia de fuentes serif
plot(x = iris$Petal.Length, y = iris$Petal.Width, pch = 17, family = "serif")

# Agregando una linea recta horizontal que pase por Petal.Width valor 1 con grosor de 2 y tipo de linea en guiones
abline(h = 1, lwd = 2, lty = 2)

# O lo que es lo mismo modificando el marco de la grafica y la familia de fuente desde antes de crear la gráfica
par(bty = "l", family = "mono")
plot(x = iris$Petal.Length, y = iris$Petal.Width)

¿Como funcionan los parámetros bty? Busca la respuesta en la ayuda. Para darte una idea de las posibilidades para pch y lty busca en Internet imágenes de pch r y lty r.

Conclusiones

  • R ofrece posibilidades muy amplias, prácticamente infinitas para hacer gráficos para análisis de datos.
  • Al menos en los paquetes base de R estas posibilidades están dadas por las funciones que hacen gráficas (plot(), boxplot(), hist(), etc.), funciones que añaden elementos a las gráficas (points(), abline(), text(), etc.), y los parámetros que modifican todo lo demás (bty, family, lty, pch, etc.).

Tareas

  • Hacer otro tipo de gráfico, de preferencia un histograma (hist()) o un diagrama de cajas y bigotes (boxplot()), y jugar con los argumentos y con los parámetros de las gráficas, y agregar elementos a la gráfica (p ej. usando abline()), usando los datos de iris. No te limites a los argumentos y parametros que ya vimos en clase.
  • Hacer un gráfico seleccionando datos con condiciones, usando también los datos de iris.

Respuestas

  1. Muestra en la consola todos los datos de la columna Sepal.Length
  2. Calcula la media de la columna Sepal.Length
  3. Muestra en la consola todos los datos de las columnas 2, 3 y 4.
  4. Muestra en la consola todos los valores de la fila 65.
  5. Guarda el valor de la fila 25 y columna 2 en un objeto llamado valor25x2 .
  6. Muestra en la consola todos los datos para la especie setosa.
  7. Muestra solo los datos de Petal.Length para la especie setosa
  8. Obtén el promedio de los datos de Petal.Length para la especie setosa y guárdalo en un objeto llamado promPetLSetosa .
### Practica de seleccion de datos ###
# 1)
iris$Sepal.Length

# 2)
mean(x = iris$Sepal.Length, na.rm = TRUE)

# 3)
iris[, 2:4]

# 4)
iris[65, ]

# 5)
valor25x2 <- iris[25, 2]
# 6)
iris[iris$Species == "setosa", ]
# 7) Hay varias maneras de hacerlo
iris$Petal.Length[iris$Species == "setosa"]
iris[iris$Species == "setosa", 3]
# 8)
promPetLSetosa <- mean(x = iris$Petal.Length[iris$Species == "setosa"], na.rm = TRUE)
promPetLSetosa <- mean(x = iris[iris$Species == "setosa", 3], na.rm = TRUE)

### Grafico ###
plot(x = iris$Petal.Length, y = iris$Petal.Width, main = "Longitud y Ancho de Petalo", sub = "Grafico de dispersion", xlab = "Longitud del petalo (cm)", ylab = "Ancho del petalo (cm)", type = "p")

### Agregando puntos ###
points(x = c(1.8, 1.9, 2.1, 2, 2.2), y = c(2.2, 1.9, 1.8, 2, 2.1))
### Agregando linea recta con intercepto y pendiente ###
abline(a = -0.36, b = 0.42)
Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade