*La función barplot en R
Para crear un gráfico de barras en R, puedes usar la función de R base barplot. En este ejemplo, vamos a crear un diagrama de barras a partir de un data frame. Concretamente vamos a usar el conocido conjunto de datos mtcars.En primer lugar, carga los datos y crea una tabla para la columna cyl con la función de table.
Cargamos los datos
data(mtcars)
attach(mtcars)
Tabla de frecuencias
mi_tabla <- table(cyl)
mi_tabla
## cyl
## 4 6 8
## 11 7 14
Recuerda que para crear un diagrama de barras en R puedes usar la función barplot y establecer como parámetro la tabla creada anteriormente para mostrar la frecuencia absoluta de los datos. Sin embargo, si prefieres un gráfico de barras con porcentajes en el eje vertical (la frecuencia relativa), puedes usar la función prop.table y multiplicar el resultado por 100 de la siguiente manera
Una fila, dos columnas
par(mfrow = c(1, 2))
Gráfico de barras de frecuencia absoluta
barplot(mi_tabla, main = "Frequencia absoluta",
col = rainbow(3))
Gráfico de barras de frecuencia relativa
barplot(prop.table(mi_tabla) * 100, main = "Frequencia relativa (%)",
col = rainbow(3))
par(mfrow = c(1, 1))
Frecuencias absolutas y relativas*
plot(factor(mtcars$cyl), col = rainbow(3))
Gráfico de barras con la función plot
barp <- barplot(mi_tabla, # Guarda los valores de X que
main = "Frequencia absoluta", # representan el centro de
col = rainbow(3)) # cada barra
lines(barp, c(5, 4, 12), type = "o", lwd = 3)
Añadir líneas para crear un climograma
barp <- barplot(mi_tabla, col = rainbow(3), ylim = c(0, 15))
text(barp, mi_tabla + 0.5, labels = mi_tabla)
-Gráfico de barras con números representando la frecuencia de cada clase. Por último, podría resultar interesante añadir un grid debajo de las barras del gráfico con la función grid.
barp <- barplot(mi_tabla, col = rainbow(3), ylim = c(0, 15))
grid(nx = NA, ny = NULL, lwd = 1, lty = 1, col = "gray")
barplot(mi_tabla, col = rainbow(3), ylim = c(0, 15), add = TRUE)
Título, etiquetas y colores del gráfico de barras
barplot(mi_tabla, # Datos
main = "Gráfico de barras", # Título
xlab = "Número de cilindros", # Etiqueta del eje X
ylab = "Frecuencia", # Etiqueta del eje Y
border = "black", # Color del borde de las barras
col = c("darkgrey", "darkblue", "red")) # Color para cada barra
barplot(mi_tabla, names.arg = c("cuatro", "seis", "ocho"))
Espacio y ancho de las barras
par(mfrow = c(1, 2))
Ancho de las barras (por defecto: width = 1)
barplot(mi_tabla, main = "Cambiar el ancho de las barras",
col = rainbow(3), width = c(0.4, 0.2, 1))
Espacio entre las barras
barplot(mi_tabla, main = "Cambiar el espacio entre barras",
col = rainbow(3), space = c(1, 1.1, 0.1))
par(mfrow = c(1, 1))
Cambiar el ancho o el espacio entre las barras de un barchart en R
df <- data.frame(ColorCoche = c("rojo", "verde", "blanco", "azul"),
num = c(3, 5, 9, 1))
barplot(height = df$num, names = df$ColorCoche,
col = c("red", "green", "white", "blue"))
Gráfico de barras de una variable continua
x <- c(2.1, 8.6, 3.9, 4.4, 4.0, 3.7, 7.6, 3.1, 5.0, 5.5, 20.2, 1.7,
5.2, 33.7, 9.1, 1.6, 3.1, 5.6, 16.5, 15.8, 5.8, 6.8, 3.3, 40.6)
barplot(table(cut(x, breaks = seq(0, 45, by = 5))))
Gráfico de barras horizontal en R
barplot(mi_tabla, main = "Gráfico de barras horizontal",
ylab = "Número de cilindros", xlab = "Frecuencia",
horiz = TRUE) # Gráfico de barras horizontal
Leyenda del gráfico de barras
barplot(mi_tabla, xlab = "Número de cilindros",
col = rainbow(3),
legend.text = rownames(mi_tabla)) # Leyenda
barplot(mi_tabla, xlab = "Número de cilindros",
col = rainbow(3),
legend.text = rownames(mi_tabla),
args.legend = list(x = "top"))
Cambiar posición a la leyenda del diagrama de barras en R
barplot(mi_tabla, xlab = "Número de cilindros",
col = rainbow(3))
legend("top", legend = rownames(mi_tabla), fill = rainbow(3))
par(mar = c(5, 5, 4, 10))
barplot(mi_tabla, xlab = "Número de cilindros",
col = rainbow(3),
legend.text = rownames(mi_tabla), # Valores de la leyenda
args.legend = list(x = "topright", inset = c(-0.20, 0))) # Argumentos de la leyenda
Añadir leyenda a un gráfico de barras sin superponerse
barplot(mi_tabla, xlab = "Número de cilindos",
col = rainbow(3),
legend.text = rownames(mi_tabla), xlim = c(0, 4.25))
Otra alternativa para mover la leyenda dev.off()
plot.new()
layout(rbind(1, 2), heights = c(10, 3))
barplot(mi_tabla, xlab = "Número de cilindros",
col = rainbow(3))
par(mar = c(0, 0, 0, 0))
plot.new()
legend("top", rownames(mi_tabla), lty = 1,
col = c("red", "green", "blue"), lwd = c(1, 2))
Gráfico de barras agrupadas en R
am <- factor(am)
Cambiamos los niveles del factor
levels(am) <- c("Automatica", "Manual")
Tabla cilindros - tipo de transmisión
tabla_variables <- table(cyl, am)
barplot(tabla_variables,
main = "Gráfico de barras agrupado",
xlab = "Tipo de transmisión", ylab = "Frecuencia",
col = c("darkgrey", "darkblue", "red"),
legend.text = rownames(tabla_variables),
beside = TRUE) # Barras agrupadas
Crear gráfico de barras por grupos en R
barplot(tabla_variables,
main = "Espacio entre grupos",
xlab = "Tipo de transmisión", ylab = "Frecuencia",
col = c("darkgrey", "darkblue", "red"),
legend.text = rownames(tabla_variables),
beside = TRUE,
space = c(0.4, 2.5)) # Espacio
Valores numéricos en grupos
resumen_datos <- tapply(mtcars$hp, list(cilindros = mtcars$cyl,
transmision = am),
FUN = mean, na.rm = TRUE)
par(mar = c(5, 5, 4, 10))
barplot(resumen_datos, xlab = "Tipo de transmisión",
main = "Media CV",
col = rainbow(3),
beside = TRUE,
legend.text = rownames(resumen_datos),
args.legend = list(title = "Cilindros", x = "topright",
inset = c(-0.20, 0)))
Gráfico de barras en R con barras de error
barplot.error <- function(x, y, ...) {
mod <- lm(y ~ x)
reps <- sqrt(lengthSí/length(levels(x)))
sem <- sigma(mod)/reps
means <- tapply(y, x, mean)
upper <- max(means) + sem
lev <- levels(x)
barpl <- barplot(means, ...)
invisible(sapply(1:length(barpl), function(i) arrows(barpl[i], means[i] + sem,
barpl[i], means[i] - sem, angle = 90, code = 3, length = 0.08)))
}
Gráfico de barras apiladas en R
mosaicplot(tabla_variables, main = "Mosaico")
Gráfico de mosaico en R
spineplot(tabla_variables)
Gráfico de espina en R
spineplot(t(tabla_variables))
Gráfico de barras en R con ggplot2
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.2
##
## Attaching package: 'ggplot2'
## The following object is masked from 'mtcars':
##
## mpg
df <- as.data.frame(mi_tabla)
ggplot(data = df, aes(x = cyl, y = Freq)) +
geom_bar(stat = "identity")
Gráfico de barras horizontal en ggplot2
ggplot(data = df, aes(x = cyl, y = Freq)) +
geom_bar(stat = "identity") +
coord_flip() # Barras horizontales
Histograma en R
distancia <- c(241.1, 284.4, 220.2, 272.4, 271.1, 268.3,
291.6, 241.6, 286.1, 285.9, 259.6, 299.6,
253.1, 239.6, 277.8, 263.8, 267.2, 272.6,
283.4, 234.5, 260.4, 264.2, 295.1, 276.4,
263.1, 251.4, 264.0, 269.2, 281.0, 283.2)
hist(distancia, main = "Histograma de frecuencias", # Frecuencia
ylab = "Frecuencia")
histograma de densidad.
hist(distancia, prob = TRUE, main = "Histograma de densidad", # Densidad
ylab = "Densidad")
hist(distancia, prob = TRUE, ylab = "Densidad", main = "Grid")
grid(nx = NA, ny = NULL, lty = 2, col = "gray", lwd = 1)
hist(distancia, prob = TRUE, add = TRUE, col = "white")
Cambiar el color del histograma
hist(distancia, main = "Cambiar color", ylab = "Frecuencia", col = "lightblue")
El argumento breaks
par(mfrow = c(1, 3))
hist(distancia, breaks = 2, main = "Pocas clases", ylab = "Frecuencia")
hist(distancia, breaks = 50, main = "Demasiadas clases", ylab = "Frecuencia")
hist(distancia, main = "Método de Sturges", ylab = "Frecuencia")
par(mfrow = c(1, 1))
Número de clases con el argumento breaks
library(KernSmooth)
## Warning: package 'KernSmooth' was built under R version 4.3.2
## KernSmooth 2.23 loaded
## Copyright M. P. Wand 1997-2009
ancho_barras <- dpih(distancia)
nbarras <- seq(min(distancia) - ancho_barras,
max(distancia) + ancho_barras, by = ancho_barras)
hist(distancia, breaks = nbarras, main = "Plug-in", ylab = "Frecuencia")
Método plug in de Wand para seleccionar el número de clases Histograma en R con dos variables
set.seed(1)
x <- rnorm(1000) # Primer grupo
y <- rnorm(1000, 1) # Segundo grupo
hist(x, main = "Dos variables", ylab = "Frecuencia")
hist(y, add = TRUE, col = rgb(1, 0, 0, alpha = 0.5))
Histograma con curva normal
hist(distancia, prob = TRUE,
main = "Histograma con curva normal", ylab = "Densidad")
x <- seq(min(distancia), max(distancia), length = 40)
f <- dnorm(x, mean = mean(distancia), sd = sd(distancia))
lines(x, f, col = "red", lwd = 2)
Añadir curva de densidad a un histograma en R
hist(distancia, freq = FALSE, main = "Curva densidad", ylab = "Densidad")
lines(density(distancia), lwd = 2, col = 'red')
Histograma y boxplot en R
# hist(distancia, probability = TRUE, ylab = "", main = "",
# col = rgb(1, 0, 0, alpha = 0.5), axes = FALSE)
# axis(1) # Añade el eje horizontal
# par(new = TRUE)
# boxplot(distancia, horizontal = TRUE, axes = FALSE,
# lwd = 2, col = rgb(0, 0, 0, alpha = 0.2))
# lines(x2, f, col = "red", lwd = 2) # Normal
# legend("topright", c("Histograma", "Densidad", "Normal"), box.lty = 0,
# lty = 1, col = c("black", "blue", "red"), lwd = c(1, 2, 2))
# set.seed(1)
Histograma en R con ggplot2
library(ggplot2)
ggplot(data.frame(distancia), aes(x = distancia)) +
geom_histogram(color = "gray", fill = "white")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Datos normales
x <- rnorm(n = 5000, mean = 110, sd = 5)
Datos exponenciales
y <- rexp(n = 3000, rate = 1)
par(mfcol = c(1, 2))
# histDenNorm(x, prob = TRUE, main = "Histograma de X")
# histDenNorm(y, prob = TRUE, main = "Histograma de Y")
par(mfcol = c(1, 1))
Calculando el número de barras como la función hist()
nbreaks <- pretty(range(distancia), n = nclass.Sturges(distancia),
min.n = 1)
ggplot(data.frame(distancia), aes(x = distancia)) +
geom_histogram(breaks = nbreaks, color = "gray", fill = "white")
ggplot(data.frame(distancia), aes(x = distancia)) +
geom_histogram(aes(y = ..density..), breaks = nbreaks,
color = "gray", fill = "white") +
geom_density(fill = "black", alpha = 0.2)
## Warning: The dot-dot notation (`..density..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(density)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Histograma en Plotly
# install.packages("plotly")
# library(plotly)
Histograma de frecuencias
# fig <- plot_ly(x = distancia, type = "histogram")
# fig
Histograma de densidad
# fig <- plot_ly(x = distancia, type = "histogram", histnorm = "probability")
# fig
Generamos datos
x <- rnorm(500)
par(mfrow = c(1, 2))
Creamos un histograma
hist(x, freq = FALSE, main = "Histograma y densidad",
ylab = "Densidad")
Calculamos la densidad
dx <- density(x)
Añadimos la línea de densidad
# lines(dx, lwd = 2, col = "red")
Curva de densidad sin histograma
# plot(dx, lwd = 2, col = "red",
# main = "Densidad")
Añadimos los datos con riudo en el eje X
# rug(jitter(x))
Histograma y densidad en R
# library(EnvStats)
# epdfPlot(x, epdf.col = "red")
Ejemplo de uso de la función epdfPlot del paquete EnvStats
par(mfrow = c(1, 2))
Ventana grande
plot(density(x, bw = 20), lwd = 2,
col = "red", main = "Ventana demasiado grande")
Ventana pequeña
plot(density(x, bw = 0.05), lwd = 2,
col = "red", main = "Ventana demasiado pequeña")
Alternativa equivalente con el paquete EnvStats
# epdfPlot(x, epdf.col = "red", density.arg.list = list(bw = 0.05),main = "Ventana
# demasiado pequeña")
En el siguiente código se muestra cómo aplicar cada uno de los enfoques:
par(mfrow = c(1, 3))
Regla del pulgar
plot(density(x), main = "Regla del pulgar",
cex.lab = 1.5, cex.main = 1.75, lwd = 2)
Validación cruzada insesgada
plot(density(x, bw = bw.ucv(x)), col = 2, # Igual a: bw = "UCV"
main = "Validación cruzada", cex.lab = 1.5,
cex.main = 1.75, lwd = 2)
Plug-in*
plot(density(x, bw = bw.SJ(x)), col = 4, # Igual a: bw = "SJ"
main = "Método plug-in",
cex.lab = 1.5, cex.main = 1.75, lwd = 2)
Multiples líneas de densidad en un gráfico
par(mfrow = c(1, 1))
plot(dx, lwd = 2, col = "red",
main = "Multiples curvas", xlab = "")
Nuevos datos
# set.seed(2)
y <- rnorm(500) + 1
# dy <- densitySí
Nueva curva
# lines(dy, col = "blue", lwd = 2)
# plot(dx, lwd = 2, col = "red",
# main = "Multiples curvas con los límites de los ejes corregidos", xlab = "",
# xlim = c(min(dx$x, dy$x), c(max(dx$x, dy$x))),
# ylim = c(min(dx$y, dy$y), c(max(dx$y, dy$y))))
# lines(dy, col = "blue", lwd = 2)
Gráficos de comparación de densidades en R
set.seed(1)
grupos <- factor(sample(c(1, 2), 100, replace = TRUE))
variable <- numeric(100)
Grupo 1: media 3
variable[grupos == 1] <- rnorm(length(variable[grupos == 1]), 3)
Grupo 2: media 0
variable[grupos == 2] <- rnorm(length(variable[grupos == 2]))
# library(sm)
# sm.density.compare(variable, grupos)
# legend("topleft", levels(grupos), col = 2:4, lty = 1:2)
Colorear el área bajo las curvas de densidad
par(mfrow = c(1, 2))
Sombrear el área bajo la curva
# plot(dx, lwd = 2, main = "", xlab = "",
# col = "red", xlim = c(-4, 6), ylim = c(0, 0.5))
# polygon(dx, col = "red")
# polygon(dx$x, dx$y, col = "red") # Equivalente
# set.seed(2)
# y <- rnorm(500) + 2
# dy <- densitySí
# lines(dy, lwd = 2, col = "blue")
# polygon(dy, col = "blue")
Sombrear el área bajo la curva con transparencia
# plot(dx, lwd = 2, main = "", xlab = "",
# col = "red", xlim = c(-4, 6), ylim = c(0, 0.5))
# polygon(dx, col = rgb(1, 0, 0, alpha = 0.5))
# lines(dy, lwd = 2, col = "blue")
# olygon(dy, col = rgb(0, 0, 1, alpha = 0.5))
Alternativa equivalente con el paquete EnvStats
# library(EnvStats)
# epdfPlot(x, # Vector con datos
# curve.fill = TRUE, # Colorear el área
# curve.fill.col = rgb(1, 0, 0, alpha = 0.5), # Color del área
# epdf.col = "red") # Color de la curva
# epdfPlot(y, curve.fill = TRUE,
# curve.fill.col = rgb(0, 0, 1, alpha = 0.5),
# epdf.col = "blue",
# add = TRUE) # Añadir la densidad sobre el plot anterior
También puedes sombrear solo un área específica debajo de la curva.
par(mfrow = c(1, 1))
plot(dx, lwd = 2, main = "Densidad", col = "red")
polygon(c(dx$x[dx$x >= 0], 0), c(dx$y[dx$x >= 0], 0),
col = rgb(1, 0, 0, alpha = 0.5), border = "red", main = "")
Gráfico de densidad con ggplot2
library(ggplot2)
df <- data.frame(x = x)
ggplot(df, aes(x = x)) +
geom_density(color = "red", # Color de la curva
fill = "red", # Color del área sombreada
alpha = 0.5) # Transparencia del color
Si quieres agregar más curvas, puedes establecer los límites del eje X
# df <- data.frame(x = x, y = y)
# df <- stack(df)
# dx <- density(x)
# dy <- densitySí
# ggplot(df, aes(x = values, fill = ind)) +
# geom_density(alpha = 0.5) + # Densidades con transparencia
# xlim(c(min(dx$x, dy$x), # Límites del eje X
# c(max(dx$x, dy$x)))) +
#scale_fill_discrete(name = "Título de la leyenda", # Cambiar el título de la leyenda
# labels = c("A", "B")) # + # Cambiar las etiquetas de la leyenda
# theme(legend.position = "none") # Eliminar leyenda
Equivalente
# ggplot(df, aes(x = values)) + geom_density(aes(group = ind, fill = ind), alpha = 0.5) +
# xlim(c(min(dx$x, dy$x), c(max(dx$x, dy$x)))) +
# scale_fill_discrete(name = "Título de la leyenda",
# labels = c("A", "B"))
¿Cómo interpretar un diagrama de caja y bigotes en R?
x <- c(8, 5, 14, -9, 19, 12, 3, 9, 7, 4,
4, 6, 8, 12, -8, 2, 0, -1, 5, 3)
boxplot(x, horizontal = TRUE)
stripchart(x, method = "jitter", pch = 19, add = TRUE, col = "blue")
Intervalo de confianza para la mediana del boxplot
boxplot(x, notch = TRUE)
Gráfico de cajas por grupo
boxplot(chickwts$weight ~ chickwts$feed)
boxplot(weight ~ feed, data = chickwts) # Equivalente
Además, en este ejemplo, podrías agregar puntos a cada diagrama de caja de la siguiente manera:
# stripchart(chickwts$weight ~ chickwts$feed, vertical = TRUE, method = "jitter",
# pch = 19, add = TRUE, col = 1:length(levels(chickwts$feed)))
Multiples boxplots
head(trees)
## Girth Height Volume
## 1 8.3 70 10.3
## 2 8.6 65 10.3
## 3 8.8 63 10.2
## 4 10.5 72 16.4
## 5 10.7 81 18.8
## 6 10.8 83 19.7
Observa la diferencia con respecto al conjunto de datos chickwts
stacked_df <- stack(trees)
head(stacked_df)
## values ind
## 1 8.3 Girth
## 2 8.6 Girth
## 3 8.8 Girth
## 4 10.5 Girth
## 5 10.7 Girth
## 6 10.8 Girth
Boxplot del conjunto de datos ‘trees’
boxplot(trees, col = rainbow(ncol(trees)))
Equivalente a:
boxplot(stacked_df$values ~ stacked_df$ind,
col = rainbow(ncol(trees)))
Puedes apilar columnas de un data frame con la función stack.
par(mfrow = c(1, ncol(trees)))
invisible(lapply(1:ncol(trees), function(i) boxplot(trees[, i])))
Reordenar boxplot en R
par(mfrow = c(1, 2))
De más bajo a más alto
medianas <- reorder(chickwts$feed, chickwts$weight, median)
medianas <- with(chickwts, reorder(feed, weight, median))
boxplot(chickwts$weight ~ medianas, las = 2, xlab = "", ylab = "")
De más alto a más bajo
medianas <- reorder(chickwts$feed, -chickwts$weight, median)
boxplot(chickwts$weight ~ medianas, las = 2, xlab = "", ylab = "")
par(mfrow = c(1, 1))
Personalizar un boxplot en R
plot.new()
set.seed(1)
Fondo gris claro
# rect(par("usr")[1], par("usr")[3], par("usr")[2], par("usr")[4],col = "#ebebeb")
Añadimos un grid blanco
# grid(nx = NULL, ny = NULL, col = "white", lty = 1,lwd = par("lwd"), equilogs = TRUE)
Boxplot
par(new = TRUE)
## Warning in par(new = TRUE): llamada par(new=TRUE) sin gráfico
boxplot(rnorm(500), # Datos
horizontal = FALSE, # Horizontal o vertical
lwd = 2, # Lines width
col = rgb(1, 0, 0, alpha = 0.4), # Color
xlab = "Etiqueta eje X", # Etiqueta eje X
ylab = "Etiqueta eje Y", # Etiqueta eje Y
main = "Boxplot personalizado en R base", # Título
notch = TRUE, # Añade intervalos de confianza para la mediana
border = "black", # Color del borde del boxplot
outpch = 25, # Símbolo para los outliers
outbg = "green", # Color de los datos atípicos
whiskcol = "blue", # Color de los bigotes
whisklty = 2, # Tipo de línea para los bigotes
lty = 1) # Tipo de línea (caja y mediana)
Agregamos una leyenda
# legend("topright", legend = "Boxplot", # Posición y título
# fill = rgb(1, 0, 0, alpha = 0.4), # Color
# inset = c(0.03, 0.05), # Cambiamos los márgenes
# bg = "white") # Color de fondo de la leyenda
Añadir la media a un boxplot en R
par(mfrow = c(1, 2))
Boxplot Vertical
boxplot(x)
Añadir línea con la media
# segments(x0 = 0.8, y0 = mean(x),x1 = 1.2, y1 = mean(x),col = "red", lwd = 2)
Añadir punto con la media
# points(mean(x), col = 3, pch = 19)
Boxplot horizontal
boxplot(x, horizontal = TRUE)
Añadir línea con la media
# segments(x0 = mean(x), y0 = 0.8,x1 = mean(x), y1 = 1.2,col = "red", lwd = 2)
Añadir punto con la media
# points(mean(x), 1, col = 3, pch = 19)
# par(mfrow = c(1, 1))
# --------------------------------------------------
# par(mfrow = c(1, 2))
# mi_df <- trees
Boxplot vertical por grupo
# boxplot(mi_df, col = rgb(0, 1, 1, alpha = 0.25))
Añadir líneas con las medias
# invisible(lapply(1:ncol(mi_df),
# function(i) segments(x0 = i - 0.4,
# y0 = mean(mi_df[, i]),
# x1 = i + 0.4,
# y1 = mean(mi_df[, i]),
# col = "red", lwd = 2)))
Añadir puntos con la medias
# medias <- apply(mi_df, 2, mean)
# medias <- colMeans(mi_df) # Equivalente (más eficiente)
# points(medias, col = "red", pch = 19)
Boxplot horizontal por grupo
# boxplot(mi_df, col = rgb(0, 1, 1, alpha = 0.25),horizontal = TRUE)
Añadir líneas con la medias
# invisible(lapply(1:ncol(mi_df), function(i) segments(x0 = mean(mi_df[, i]),
# y0 = i - 0.4,
# x1 = mean(mi_df[, i]),
# y1 = i + 0.4,
# col = "red", lwd = 2)))
Añadir puntos con la medias
# medias <- apply(mi_df, 2, mean)
# medias <- colMeans(mi_df) # Equivalente (más eficiente)
# points(medias, 1:ncol(mi_df), col = "red", pch = 19)
# par(mfrow = c(1, 1))
Boxplot e histograma en R
par(mfrow = c(1, 1))
Datos multimodales
n <- 20000
ii <- rbinom(n, 1, 0.5)
dat <- rnorm(n, mean = 110, sd = 11) * ii +
rnorm(n, mean = 70, sd = 5) * (1 - ii)
Histograma
hist(dat, probability = TRUE, ylab = "", col = "grey",
axes = FALSE, main = "")
Eje
# axis(1)
Densidad
# lines(density(dat), col = "red", lwd = 2)
Boxplot
par(new = TRUE)
## Warning in par(new = TRUE): llamada par(new=TRUE) sin gráfico
boxplot(dat, horizontal = TRUE, axes = FALSE,
lwd = 2, col = rgb(0, 1, 1, alpha = 0.15))
Boxplot en ggplot2 a partir de un vector
library(ggplot2)
Transformar x en un data frame
x <- data.frame(x)
Boxplot a partir de un vector
ggplot(data = x, aes(x = "", y = x)) +
stat_boxplot(geom = "errorbar", # Bigotes
width = 0.2) +
geom_boxplot(fill = "#4271AE", # Color de la caja
outlier.colour = "red", # Color de los valores atípicos
alpha = 0.9) + # Transparencia del color de la caja
ggtitle("Boxplot a partir de un vector") + # Título del plot
xlab("") + # Etiqueta del eje x
coord_flip() # Boxplot horizontal
Boxplot por grupo
ggplot(data = chickwts, aes(x = feed, y = weight)) +
stat_boxplot(geom = "errorbar", # Bigotes
width = 0.2) +
geom_boxplot(fill = "#4271AE", colour = "#1F3552", # Colores
alpha = 0.9, outlier.colour = "red") +
scale_y_continuous(name = "Peso") + # Etiqueta de la variable continua
scale_x_discrete(name = "Alimentación") + # Etiqueta de los grupos
ggtitle("Boxplot por grupos en ggplot2") + # Título del plot
theme(axis.line = element_line(colour = "black", # Personalización del tema
size = 0.25))
## Warning: The `size` argument of `element_line()` is deprecated as of ggplot2 3.4.0.
## ℹ Please use the `linewidth` argument instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Boxplot a partir de un data frame
ggplot(data = stack(trees), aes(x = ind, y = values)) +
stat_boxplot(geom = "errorbar", # Bigotes
width = 0.2) +
geom_boxplot(fill = "#4271AE", colour = "#1F3552", # Colores
alpha = 0.9, outlier.colour = "red") +
scale_y_continuous(name = "Peso") + # Etiqueta de la variable continua
scale_x_discrete(name = "Alimentación") + # Etiqueta de los grupos
ggtitle("Boxplot a partir de un data frame") + # Título del plot
theme(axis.line = element_line(colour = "black", # Personalización del tema
size = 0.25))