es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para crear las gráficas deseadas, puedes usar una combinación de las funciones pivot_longer, filter y ggplot del paquete tidyverse. 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 bucle for 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.

Comments are closed.