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, …)
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 utilizandodplyr::group_by()
ydplyr::mutate()
. Aquí tienes un ejemplo de código: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íneasgroup_by(colour)
ymutate(y = row_number())
agregan una columna de conteo secuencial dentro de cada grupo de color, lo que resulta en la columnay
del resultado deseado.El marco de datos resultante
desiredOutput
se puede utilizar luego enggplot()
congeom_point()
para crear el gráfico deseado.