Trabajando con múltiples columnas en R usando geom_point para gráficos.
Tengo un marco de datos que se ve así:
total-36 columnas.
Código de muestra de datos:
df <-
structure(
list(
Bacteroidaceae = c(
0,
0.10944999,
0.104713314,
0.125727668,
0.124136247,
0.005155911,
0.005072778,
0.010231826,
0.010188139
),
Christensenellaceae = c(
0,
0.009910731,
0.010131195,
0.009679938,
0.01147601,
0.010484508,
0.008641566,
0.010017172,
0.010741488
),
treatment = c(
"Muestra Original1",
"Muestra Original2",
"Muestra Original3",
"Muestra Original4",
"Tratamiento1_1",
"Tratamiento1_2",
"Tratamiento1_3",
"Tratamiento1_4"
)
),
class = "data.frame",
row.names = c(NA,-8L)
)
Lo que deseo hacer es crear gráficos para todas las columnas en los datos, para que cada columna tenga 2 gráficos: uno para el tratamiento 1 y otro para la muestra original, en total 72 gráficos.
Por ejemplo:
Igual para el tipo de muestra original, intenté usar este código:
df %>%
tidyr::pivot_longer(!treatment, names_to = “taxa”, values_to = “value”) %>%
dplyr::filter(str_detect(treatment, “Tratamiento1”)) %>%
for (i in columns(df)){
ggplot(aes(x = treatment, y = value, color = taxa),group=treatment) +
geom_point() +
stat_summary(fun.y = mean,
geom = “line”, width = 0.5)+geom_jitter(widh=0.25)
theme_bw()}}
}
pero no funcionó.
¿Hay alguna otra forma?
Gracias.
davy.ai
Para crear las gráficas deseadas, puedes usar una combinación de las funciones
pivot_longer
,filter
yggplot
del paquetetidyverse
. Aquí tienes un ejemplo de código:“`{r}
library(tidyverse)
pivotar el dataframe al formato largo
df_long <- df %>%
pivot_longer(-treatment, names_to = “taxa”, values_to = “value”)
filtrar los datos para treatment1 y las muestras originales por separado
df_treatment1 <- df_long %>%
filter(str_detect(treatment, “treatment1”))
df_original <- df_long %>%
filter(str_detect(treatment, “Original”))
crear una función para generar gráficas para cada columna
generate_plot <- function(df, col){
ggplot(df, aes(x = treatment, y = value, color = taxa, group = taxa)) +
geom_point() +
stat_summary(fun.y = mean, geom = “line”, width = 0.5) +
geom_jitter(width = 0.25) +
labs(title = col) +
theme_bw()
}
recorrer las columnas en los datos y generar gráficas para cada columna
plots_treatment1 <- list()
plots_original <- list()
for (col in names(df_long)[-1]){
plot_treatment1 <- generate_plot(df_treatment1, col)
plot_original <- generate_plot(df_original, col)
plots_treatment1[[col]] <- plot_treatment1
plots_original[[col]] <- plot_original
}
ver las gráficas para una columna específica
plots_treatment1[[“Bacteroidaceae”]]
plots_original[[“Bacteroidaceae”]]
“`
Este código debería generar un total de 72 gráficas (36 columnas x 2 tipos de gráficas). La función
generate_plot
crea una gráfica para una columna específica ya sea para los datos de treatment1 o para las muestras originales. El buclefor
genera gráficas para todas las columnas en los datos y las almacena en una lista. Puedes acceder a las gráficas para una columna específica indexando la lista con el nombre de la columna.