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.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))
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))
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))
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)
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
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 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
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.
# 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)
También te puede interesar