Stack Overflow en español Asked by astronauta_estadístico on November 20, 2021
De antemano dar mis agradecimientos por las posibles respuestas
x1 <- c("A", "A","B", "B", "B", "A","A", "B", "A", "A")
x2 <- c("B", "A","A", "A", "B", "B","A", "A", "B", "B")
z1 <- rnorm(10, 70)
z2 <- rnorm(10, 1.7)
z3 <- rpois(10, 2)
df <- data.frame(x1,x2,z1,z2,z3)
cómo se guarda una gráfica en un for, de tal forma que pueda invocar solo la gráfica 1 o 2 o 3, y que no salgan todas en una ventana
par(mfrow = c(2, 2))
for(i in 3:5) {
plot(x = df[[1]], y = df[[i]],main=names(df[1]),
col=c('lightblue', 'lightgreen'))
}
cómo puedo incluir un for, para que recorra las variables cualitativas df[1] y df[2] y que pueda invocar cualquier combinación del vector, df[3] o df[4] o df[5] con df[1] o df[2]
example=function(k) {
ggplot(df, aes(x = df[[k]], fill = df[[1]])) + geom_density(alpha = 0.5)+
scale_x_continuous(limits=c(-50,80))+ labs(fill = names(df[k]))+ggtitle("variable", names(df[k]))
}
lapply(3:5,FUN=example)[3]
Lamentablemente plot()
no retorna el gráfico, éste se muestra como un efecto colateral de la función, por lo que para guardarnos los mismos deberemos hacer uso de recordPlot()
:
p <- list() # Una lista para guardar los gráficos
j <- 1
for(i in 3:5) {
plot(x = df[[1]], y = df[[i]],main=names(df[1]),col=c('lightblue', 'lightgreen'))
p[[j]] <- recordPlot() # Salvamos el gráfico en la lista
plot.new()
j <- j + 1
}
p[[1]] # Grafico 1
p[[2]] # Grafico 2
p[[3]] # Grafico 3
Con respecto a tu otra pregunta, hay múltiples formas de resolverlo, se me ocurre rápidamente, preparar una función que reciba los nombres de las dos variables, cualitativa y cuantitativa:
graficar_df <- function(df, v1, v2) {
ggplot(df, aes_string(x = v2, fill = v1)) +
geom_density(alpha = 0.5) +
scale_x_continuous(limits = c(-50,80)) +
labs(fill = v2) +
ggtitle("variable", v1)
}
El secreto es mapear las dimensiones gráficas mediante aes_string()
que espera directamente las cadenas con los nombres de variable. Lo único que nos restaría hacer, es construir una tabla de combinaciones:
opciones <- expand.grid(names(df[,1:2]), names(df[,3:5]))
opciones
Var1 Var2
1 x1 z1
2 x2 z1
3 x1 z2
4 x2 z2
5 x1 z3
6 x2 z3
Cada fila será una gráfica distinta, lo que resta es recorrer cada fila para hacer los gráficos:
apply(opciones, 1, function(r) graficar_df(df, r[1], r[2]))
Answered by Patricio Moracho on November 20, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP