Combinar gráficos en R

Combinaciones simples: mfrow y mfcol

Es realmente simple combinar gráficos en R base con los parámetros gráficos mfrow y mfcol. Tan solo necesitas especificar un vector con el número de filas y el número de columnas que quieras crear. La selección del parámetro gráfico a ser usado depende de cómo quieras que se organicen tus gráficos:

  • mfrow: los gráficos se organizarán por filas.
  • mfcol: los gráficos se organizarán por columnas.

mfrow

mfcol

Como ejemplo, si quieres combinar dos gráficos tan solo tienes que escribir lo siguiente:

# Datos
x <- rexp(50)

# Una fila, dos columnas
par(mfrow = c(1, 2))

# Los siguientes gráficos se combinarán
hist(x, main = "Gráfico izquierda")  # Izquierda
boxplot(x, main = "Gráfico derecha") # Derecha

# Volvemos al estado original
par(mfrow = c(1, 1))

Combinar dos gráficos en R con mfrow

Si necesitas añadir más filas, modifica el vector:

# Datos
set.seed(6)
x <- rexp(50)

# Dos filas, dos columnas
par(mfrow = c(2, 2))

# Gráficos
hist(x, main = "Arriba izquierda")           # Arriba izquierda
boxplot(x, main = "Arriba derecha")          # Arriba derecha
plot(x, main = "Abajo izquierda")            # Abajo izquierda
pie(table(round(x)), main = "Abajo derecha") # Abajo derecha

# Volvemos al estado original
par(mfrow = c(1, 1))

Organizar gráficos en R base

Si prefieres que tus gráficos se ordenen por columna, usa el parámetro gráfico mfcol:

# Datos
set.seed(6)
x <- rexp(50)

# Dos filas, dos columnas
par(mfcol = c(2, 2))

# Gráficos
hist(x, main = "Arriba izquierda")           # Arriba izquierda
boxplot(x, main = "Bottom left")             # Bottom left
plot(x, main = "Arriba derecha")             # Arriba derecha
pie(table(round(x)), main = "Abajo derecha") # Abajo derecha

# Volvemos al estado original
par(mfcol = c(1, 1))

Organizar gráficos en R

Composiciones complejas: la función layout

En caso de que necesites organizar tus gráficos de una forma más compleja puedes utilizar la función layout. Los argumentos de la función son los siguientes:

  • mat: matriz donde cada valor representa la localización de las figuras.
  • widths: vector para el ancho de las columnas. También puedes especificarlos en centímetros con la función lcm.
  • heights: vector para el alto de las columnas. También puedes especificarlos en centímetros con la función lcm.
  • respect: Valor lógico o una matriz de ceros y unos de la misma dimensión que mat para indicar si respetar las relaciones entre anchos y alturas o no.

Ten en cuenta que puedes previsualizar la composición haciendo uso de la función layout.show antes de añadir los gráficos.

l <- layout(matrix(c(1, 2,  # Primero, segundo
                     3, 3), # y tercer gráfico
            nrow = 2,
            ncol = 2,
            byrow = TRUE))

layout.show(l)

Función layout.show para crear composiciones complejas

Ejemplo 1: dos filas, con dos gráficos en la primera y otro en la segunda.

Usando el layout que creamos antes, podemos añadir los gráficos de la siguiente manera:

mat <- matrix(c(1, 2,  # Primero, segundo
                3, 3), # y tercer gráfico
              nrow = 2, ncol = 2,
              byrow = TRUE)

layout(mat = mat)

# Datos
set.seed(6)
x <- rexp(50)

plot(x)    # Primer gráfico
boxplot(x) # Segundo gráfico
hist(x)    # Tercer gráfico

Combinaciones de gráficos complejas con la función layout en R

Ejemplo 2: dos filas, con dos gráficos en la segunda y uno en la primera, siendo la segunda fila tres veces más alta que la primera.

mat <- matrix(c(1, 1,  # Primero
                2, 3), # segundo y tercer gráfico
              nrow = 2, ncol = 2,
              byrow = TRUE)

layout(mat = mat,
       heights = c(1, 3)) # Primera y segunda fila
                          # Alturas relativas

# Datos
set.seed(6)
x <- rexp(50)

plot(x)    # Primera fila
boxplot(x) # Segunda fila, izquierda
hist(x)    # Segunda fila, derecha

Ejemplo de uso de la función layout en R

Ejemplo 3: dos columnas, con dos gráficos a la derecha y uno a la izquierda, siendo la primera columna tres veces más ancha que la primera.

mat <- matrix(c(1, 2,  # Primero, segundo
                1, 3), # primero y tercer gráfico
              nrow = 2, ncol = 2,
              byrow = TRUE),

layout(mat = mat,
       widths = c(1, 2)) # Primera y segunda columna
                         # Anchos relativos

# Datos
set.seed(6)
x <- rexp(50)

plot(x)    # Primera columna, arriba
boxplot(x) # Primera columna, abajo
hist(x)    # Segunda columna

Organizando gráficos con la función layout

Gráficos marginales

Con la función layout también se pueden añadir gráficos marginales a otro gráfico. Para ello podrías ejecutar algo como lo siguiente. Ten en cuenta que necesitarás personalizar varios parámetros gráficos para cada gráfico.

Gráficos marginales en R con la función layout

# Datos
set.seed(6)
x <- rexp(50)

layout(matrix(c(2, 0, 1, 3),
              nrow = 2, ncol = 2,
              byrow = TRUE),
       widths = c(3, 1),
       heights  = c(1, 3), respect = TRUE)

# Margen superior y derecho del gráfico principal
par(mar = c(5.1, 4.1, 0, 0))
plot(x)

# Margen izquierdo del histograma
par(mar = c(0, 4.1, 0, 0))
hist(x, main = "", bty = "n",
     axes = FALSE, ylab = "")

# Margen inferior del gráfico de cajas
par(mar = c(5.1, 0, 0, 0))

# Box plot sin la caja del gráfico
par(bty = "n")

# Box plot sin ejes
boxplot(x, axes = FALSE)
Better Data Visualizations

A Guide for Scholars, Researchers, and Wonks

Comprar en Amazon
Storytelling con Datos

Visualización de datos para profesionales

Comprar en Amazon
Data Sketches

A journey of imagination, exploration, and beautiful data visualizations

Comprar en Amazon

También te puede interesar