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.

Multiple puntos basados ​​en un único valor de observación.

Quiero crear un gráfico en el que trazo una entrada (por ejemplo, un geom_point) para CADA valor de cantidad dentro de un marco de datos.

A continuación, he creado una versión simplificada del marco de datos original que imagino que necesito en un marco de datos resultante a partir del cual puedo hacer el gráfico, ya que creo que ggplot necesitará una fila separada para cada uno.

En el ejemplo, me gustaría trazar 3 puntos Rojos en la posición x, con y calculado en función de un conteo secuencial para cada entrada en el marco de datos original (en el ejemplo, esto es 1-3 para Rojo y 1-4 para Azul).

Creo que esto es posible utilizando Apply y una función personalizada, pero estoy un poco perdido en cómo proceder.

biblioteca(tidyverse)
origInput <- data.frame(x = c(7,2), colour = c(“Red”, “Blue”), quantities = c(3, 4))

desiredOutput <- data.frame(x = c(7,7,7,2,2,2,2),
colour = c(“Red”, “Red”, “Red”, “Blue”, “Blue”, “Blue”, “Blue”),
y = c(1, 2, 3, 1, 2, 3, 4))

ggplot(desiredOutput, aes(x = x, y = y, colour = colour)) +
geom_point()

extrapolador <- function() {}
output <- apply(df, 2, extrapolador)
ggplot(output, …)

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para crear el gráfico deseado, puedes utilizar la función tidyr::uncount() para duplicar cada fila en el marco de datos original basado en el valor de cantidad, y luego agregar una columna de conteo secuencial utilizando dplyr::group_by() y dplyr::mutate(). Aquí tienes un ejemplo de código:

    library(tidyverse)
    
    origInput <- data.frame(x = c(7,2), colour = c("Red", "Blue"), quantities = c(3, 4))
    
    desiredOutput <- origInput %>%
      uncount(quantities) %>%
      group_by(colour) %>%
      mutate(y = row_number()) %>%
      ungroup()
    
    ggplot(desiredOutput, aes(x = x, y = y, colour = colour)) +
      geom_point()
    

    La línea uncount(quantities) crea duplicados de cada fila basándose en el valor de cantidad, lo que resulta en un marco de datos con 7 filas (3 para Rojo y 4 para Azul). Las líneas group_by(colour) y mutate(y = row_number()) agregan una columna de conteo secuencial dentro de cada grupo de color, lo que resulta en la columna y del resultado deseado.

    El marco de datos resultante desiredOutput se puede utilizar luego en ggplot() con geom_point() para crear el gráfico deseado.

Comments are closed.