InicioGr谩ficosGr谩fico de l铆neas en R

Gr谩fico de l铆neas en R

Creando un gr谩fico de l铆neas en R base

Los gr谩ficos de l铆neas muestran datos ordenados conectados con l铆neas rectas (segmentos). En este tutorial aprender谩s a dibujar gr谩ficos de l铆neas en R base utilizando las funciones plot, lines, matplot, matlines y curve, as铆 como a modificar el estilo de los gr谩ficos resultantes.

Dibujando un gr谩fico de l铆neas en R con la funci贸n plot

En R base se puede crear un gr谩fico de l铆neas con la funci贸n plot. Considera que tienes los datos que se muestran en la siguiente tabla:

x y
1 200
2400
3600
4700
5500

Puedes dibujar los datos anteriores usando tres m茅todos diferentes: especific谩ndolos como dos vectores, pasando los datos como data frame o como f贸rmula. Ten en cuenta que establecimos type = "l" para conectar las observaciones con segmentos.

# Datos
x <- c(1, 2, 3, 4, 5)
y <- c(200, 300, 600, 700, 500)

# Vectores
plot(x, y, type = "l")

# Data frame
plot(data.frame(x, y), type = "l") # Equivalente

# F贸rmula
plot(y ~ x, type = "l") # Equivalente
Gr谩fico de l铆neas b谩sico en R

El estilo de los gr谩ficos de l铆neas en R se puede personalizar configurando los par谩metros gr谩ficos. Por ejemplo, el color y el ancho de l铆nea se pueden modificar con los argumentos col y lwd, respectivametne.

plot(x, y, type = "l",
     col = "lightblue", # Color
     lwd = 5)           # Ancho de l铆nea
Personalizaci贸n del color y ancho del gr谩fico de l铆neas

Tipos de gr谩ficos de l铆neas

Adem谩s de type = "l", existen tres tipos m谩s de gr谩ficos de l铆neas disponibles en R base. Estableciendo type = "s" se crear谩 un gr谩fico de escalera, type = "b" crear谩 un gr谩fico con segmentos y puntos y type = "o" tambi茅n mostrar谩 segmentos y puntos, pero la l铆nea aparecer谩 por encima de los puntos.

par(mfrow = c(1, 3))

plot(x, y, type = "s", main = 'type = "s"')
plot(x, y, type = "b", main = 'type = "b"')
plot(x, y, type = "o", main = 'type = "o"')

par(mfrow = c(1, 1))
Tipos de gr谩ficos de l铆neas

Adem谩s, existen seis tipos diferentes de l铆neas, que pueden ser especificadas haciendo uso del argumento lty, desde 1 hasta 6:

par(mfrow = c(2, 3))

plot(x, y, type = "l", lwd = 2, lty = 1, main = "lty = 1")
plot(x, y, type = "l", lwd = 2, lty = 2, main = "lty = 2")
plot(x, y, type = "l", lwd = 2, lty = 3, main = "lty = 3")
plot(x, y, type = "l", lwd = 2, lty = 4, main = "lty = 4")
plot(x, y, type = "l", lwd = 2, lty = 5, main = "lty = 5")
plot(x, y, type = "l", lwd = 2, lty = 6, main = "lty = 6")

par(mfrow = c(1, 1))
Tipos de l铆neas en R

Tambi茅n puedes especificar el s铆mbolo utilizado cuando type = "b" o type = "o". Estos s铆mbolos, tambi茅n llamados s铆mbolos pch pueden ser seleccionados con el argumento pch, que toma valores desde 0 (cuadrado) hasta 25. Consulta s铆mbolos pch para m谩s informaci贸n. Los s铆mbolos 1 a 25 son:

S铆mbolos pch en R

El color del s铆mbolo se puede especificar con el argumento col, que tambi茅n modificar谩 el color de la l铆nea.

plot(x, y, type = "b", cex = 2, pch = 21, bg = "blue", col = "red")
Gr谩fico de l铆neas con s铆mbolos pch
Los s铆mbolos 21 a 25 se pueden especificar con un color de fondo (distinto al del borde), haciendo uso del argumento bg.

Sin embargo, tambi茅n puedes agregar los puntos de forma separada utilizando la funci贸n points. Este procedimiento permitir谩 personalizar todos los colores como quieras.

plot(x, y, type = "l",
     col = "red")     # Color de la l铆nea

# Agregando puntos
points(x, y,          # Coordenadas
       pch = 21,      # S铆mbolo
       cex = 2,       # Tama帽o del s铆mbolo
       bg = "green",  # Color de fondo del s铆mbolo
       col = "blue",  # Color del borde del s铆mbolo
       lwd = 3)       # Ancho del borde del s铆mbolo
Puntos en un gr谩fico con la funci贸n points

Ten en cuenta que el argumento pch tambi茅n permite introducir caracteres, pero solo uno. En el siguiente ejemplo estamos pasando las primeras cinco letras del abecedario.

plot(x, y, type = "b",
     pch = LETTERS[1:5], # Letras como s铆mbolos
     cex = 2,            # Tama帽o de los s铆mbolos
     col = 1:5,          # colores pch
     xlim = c(0, 6),     # L铆mites del eje X
     ylim = c(150, 750)) # L铆mites del eje Y
Gr谩fico de l铆neas con letras

Agregando anotaciones al gr谩fico

En caso de que necesites hacer algunas anotaciones en el gr谩fico puedes utilizar la funci贸n text, cuyo primer argumento es la coordenada del eje X, el segundo la del eje Y y el tercero la anotaci贸n.

plot(x, y, type = "l")
text(x = 3.5, y = 250, "Anotaci贸n personalizada")
Anotaci贸n de texto en gr谩fico de l铆neas

Tambi茅n puedes etiquetar cada punto, pasando un vector de etiquetas:

etiquetas <- c("Texto 1", "Texto 2", "Texto 3", "Texto 4", "Texto 5")

plot(x, y, type = "l",
     xlim = c(0.5, 5.5), # L铆mite eje X
     ylim = c(150, 750)) # L铆mite eje Y
text(x = x, y = y, etiquetas, col = "red")
Agregando texto a un gr谩fico de l铆neas

La funci贸n curve

En la secci贸n anterior revisamos c贸mo crear un gr谩fico de l铆neas con los datos disponibles, pero en algunos escenarios necesitaremos crear un gr谩fico de l铆neas a partir de una funci贸n. Para ello podemos utilizar la funci贸n curve, especificando la funci贸n que queremos dibujar y el rango de valores del eje X con en los argumentos from (el m铆nimo) y to (el m谩ximo). Por ejemplo, podemos dibujar las funciones seno y coseno:

curve(cos,      # Funci贸n coseno
      from = 0, # Desde 0
      to = 10,  # Hasta 10
      ylab = "",
      main = "Seno y coseno")

# Nueva curva sobre la primera
curve(sin, from = 0, to = 10,
      col = 2,    # Color de la segunda curva
      add = TRUE) # Necesario para agregar la curva sobre la primera
Funci贸n curve en R

Ten en cuenta que tambi茅n puedes crear un gr谩fico de l铆neas con una funci贸n propia.

# Funci贸n propia
fun <- function(x){
    return(x ^ 3)
}

# Gr谩fico de nuestra funci贸n
curve(fun, from = -5, to = 5, ylab = expression(x^3),
      main = "Funci贸n curve")
Dibujando una funci贸n en R con la funci贸n curve

M煤ltiples l铆neas

Si tienes m谩s variables puedes a帽adirlas al mismo gr谩fico con la funci贸n lines. Como ejemplo, si tienes otra variable llamada y2, puedes crear un gr帽afico de l铆neas de dos variables con el siguiente c贸digo:

# M谩s datos
y2 <- c(300, 400, 450, 400, 250)

# Primera l铆nea
plot(x, y, type = "l")

# Segunda l铆nea
lines(x, y2, type = "l", col = 2) # Mismos valores de X
M煤ltiples l铆neas en un gr谩fico

Ten en cuenta que la funci贸n lines no est谩 dise帽ada para crear un gr谩fico por si misma, sino que agrega una nueva capa al gr谩fico ya creado.

Las funciones matplot y matlines

Una mejor namera de crear gr谩ficos de l铆neas a partir de un data frame o una matriz con m煤ltiples variables es utilizar la funci贸n matplot. Considera que tienes los siguientes datos normales multivariantes:

# install.packages("MASS")
library(MASS) # Para la funci贸n mvrnorm

set.seed(1)

# Datos normales multivariantes
medias <- rep(0, 5)
varianzas <- matrix(1:25, ncol = 5)
datos <- data.frame(mvrnorm(n = 10, mu = medias, Sigma = varianzas))

# Seis primeras filas
head(datos)
        X1         X2         X3          X4         X5
1  0.9290410 -1.5584821  1.6540593  2.65356974  4.6452049
2 -0.1720333 -1.4431276 -0.8738552 -0.06321522 -0.8601666
3  0.6801899  2.2411593  3.7697473  3.34137647  3.4009497
4 -1.8517645  0.4274748 -3.5673172 -8.44912188 -9.2588224
5 -0.1966158 -1.7617016 -3.0887668 -0.01224664 -0.9830791
6  0.7674637  2.1241256  2.4990073  3.68081631  3.8373183

Con esta funci贸n puedes dibujar todas las variables a la vez:

# Dibujar todas las columnas a la vez
matplot(datos, type = "l", main = "Funci贸n matplot")
Funci贸n matplot en R

De manera equivalente a la funci贸n lines, matlines permite agregar nuevas l铆neas al gr谩fico existente. Por ejemplo, podr铆as dibujar las tres primeras columnas de tus datos con la funci贸n matplot y luego agregar las dos 煤ltimas con matlines.

# Tres primeras columnas del data frame
datos1 <- datos[, 1:3]

# Gr谩fico de las tres columnas
matplot(datos1, type = "l", lty = 1,
        ylab = "datos",
        ylim = c(min(datos), max(datos))) # L铆mites del eje Y
Usando la funci贸n matplot
# Dos 煤ltimas columnas del data frame
datos2 <- datos[, 4:5]

# Agregamos datos2 al gr谩fico anterior
matlines(datos2, type = "l", lty = 1, col = 4:5)
Agregando l铆neas con la funci贸n matlines

Gr谩fico de l铆neas con datos categ贸ricos

Adem谩s de crear gr谩ficos de l铆neas con variables num茅ricas, tambi茅n es posible crearlos si tenemos una variable de tipo factor (categ贸rica). Considera los siguientes datos de ejemplo:

# Datos
datos <- data.frame(grupo = as.factor(c("Grupo 1", "Grupo 2", "Grupo 3")),
                    var1 = c(1, 3, 2),
                    var2 = c(2, 1.5, 1.75))

head(datos)
   grupo var1 var2
1 Grupo 1  1  2.00
2 Grupo 2  3  1.50
3 Grupo 3  2  1.75

Si quieres dibujar los datos anteriores como un gr谩fico de l铆neas, puedes transformar la variable factor en num茅rica con la funci贸n is.numeric y crear el gr谩fico. Puedes poner la variable factor en el eje X o en el eje Y:

par(mfrow = c(1, 2))

#-------------------
# Grupos en el eje X
#-------------------
plot(as.numeric(datos$grupo), datos$var1, type = "l",
     ylab = "Valor", xlab = "Grupo",
     xaxt = "n")

# Segunda variable
lines(as.numeric(datos$grupo), datos$var2, col = 2)

# Nombres de los grupos
axis(1, labels = as.character(datos$grupo), at = as.numeric(datos$grupo))

#-------------------
# Grupos en el eje Y
#-------------------
plot(datos$var1, as.numeric(datos$grupo), type = "l",
     ylab = "Grupo", xlab = "Valor",
     yaxt = "n")

# Segunda variable
lines(datos$var2, as.numeric(datos$grupo), col = 2)

# Nombres de los grupos
axis(2, labels = as.character(datos$grupo), at = as.numeric(datos$grupo))

par(mfrow = c(1, 1))
Gr谩fico de l铆neas con datos categ贸ricos

Agregando una leyenda al gr谩fico

La funci贸n legend permite agregar leyendas en gr谩ficos de R base. Tan solo necesitas especificar la posici贸n o las coordenadas, las etiquetas de la leyenda, el tipo del l铆nea y su color. Tambi茅n puedes especificar s铆mbolos pch de ser necesario.

plot(x = 1:10, y = 1:10, type = "l")
lines(x = 1:10, y = sqrt(1:10), col = 2, type = "l")

legend("topleft", legend = c("L铆nea 1", "L铆nea 2"), lty = 1, col = 1:2)
Agregar una leyenda a un gr谩fico de l铆neas en R

Gr谩fico de l铆neas en R con dos ejes (eje dual)

Por 煤ltimo, es importante destacar que es posible agregar un segundo eje con la funci贸n axis de la siguiente manera:

# Incrementa los m谩rgenes del gr谩fico
par(mar = c(5.25, 4.25, 4.25, 4.25))

# Primera l铆nea
plot(x = 1:10, y = 1:10, type = "l", xlab = "x", ylab = "L铆nea 1")

# Nuevo gr谩fico (necesario para unir ambos gr谩ficos)
par(new = TRUE)

# Segunda l铆nea
plot(1:10, (1:10)^2, type = "l",
     col = 2,
     axes = FALSE, # Sin ejes
     bty = "n",    # Sin caja
     xlab = "", ylab = "") # Sin etiquetas de los ejes

# Nuevo eje
axis(4)
mtext("L铆nea 2", side = 4, line = 3, col = 2)