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)
Fundamentals of Data Visualization

A Primer on Making Informative and Compelling Figures

Comprar en Amazon
Storytelling con Datos

Visualización de datos para profesionales

Comprar en Amazon
ggplot2

Elegant Graphics for Data Analysis

Comprar en Amazon

También te puede interesar