Gráfico a replicar
Continuamos con la serie iniciada sobre la creación de gráficos del libro An Introduction to Statistical Learning. En esta ocasión replicaremos los gráficos de la figura 1.4. Se trata de dos diagramas de dispersión del conjunto de datos NCI-60 y cada observación representa una de las 64 líneas celulares (cell lines) correspondientes a un tipo de cáncer. A la izquierda, representados dos vectores de análisis de componentes principales. Parece haber 4 grupos de observaciones que separamos por colores. A la derecha, el mismo gráfico de la izquierda pero representados cada tipo de cáncer con un color y símbolo diferente. Las observaciones que corresponden al mismo tipo de cáncer tienden a estar cerca en este espacio bidimensional.
Solución con ggplot2
# Librerías y datos NCI60
library(ISLR)
library(tidyverse)
nci.labs <- NCI60$labs
nci.data <- NCI60$data
# Análisis de componentes principales (ACP o PCA) con NCI60
pr.out <- prcomp(nci.data, scale=TRUE)
# Gráfico 1
df1 <- data.frame(pr.out$x[, 1:2], nci.labs) %>%
mutate(groups =ifelse(
PC1 < -40, 'group1', ifelse(
PC1 > -42 & PC2 > 1, 'group2', ifelse(
PC1 > 25 & PC2 < 1, 'group3', 'group4'))))
p1 <- ggplot(df1, aes(x = PC1, y = PC2, colour = groups)) +
geom_point(size = 3)+
labs(x = "Z1", y = "Z2")+
scale_color_manual(values = c("group1" = "red", "group2" = "blue", "group3" = "green4", "group4" = "cyan4" ))+
theme_bw()+
theme(legend.position="none")
# Gráfico 2
df2 <- data.frame(pr.out$x[, 1:2], nci.labs)
p2 <- ggplot(df2, aes(x = PC1, y = PC2, colour = nci.labs)) +
geom_point(size = 3)+
labs(x = "Z1", y = "Z2")+
theme_bw()+
theme(legend.position="none")
# Gráficos lado a lado: dos alternativas
library(gridExtra)
grid.arrange(p1, p2, ncol = 2)
library(cowplot)
plot_grid(p1, p2, labels = "AUTO")
# Con leyenda modificando su título
ggplot(df2, aes(x = PC1, y = PC2, colour = nci.labs)) +
geom_point(size = 3)+
labs(x = "Z1", y = "Z2", colour = "Types of cancer")+
theme_bw()
Gráficos con ggplot2
Alternativa con el paquete Graphics
Con el paquete graghics de la configuración base de R.
# Asigno colores manualmente para el primer gráfico
df3 <- data.frame(pr.out$x[, 1:2], nci.labs) %>%
mutate(groups =ifelse(
PC1 < -40, 'red', ifelse(
PC1 > -42 & PC2 > 1, 'blue', ifelse(
PC1 > 25 & PC2 < 1, 'green4', 'cyan4'))))
# Función para asignar colores del segundo gráfico
Cols <- function(vec){
cols=rainbow(length(unique(vec)))
return(cols[as.numeric(as.factor(vec))])
}
# Gráficos
par(mfrow = c(1,2))
plot(df1[, 1:2], col = df3$groups, pch = 19, xlab = "Z1", ylab = "Z3")
plot(df1[, 1:2], col = Cols(nci.labs), pch = 19, xlab = "Z1", ylab = "Z2")
Entradas relacionadas
- Gráficos de An Introduction to Statistical Learning con ggplot2 - Figura 1.1
- Gráficos de An Introduction to Statistical Learning con ggplot2 - Figura 1.2
- Gráficos de An Introduction to Statistical Learning con ggplot2 - Figura 1.3
- Entradas de diagramas de dispersión
- Subconjunto de estadísticas descriptivas en R
No hay comentarios:
Publicar un comentario