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.

Relleno de color gradiante en una barplot en ggplot2

Me gustaría rellenar en degradado una gráfica de barras de ggplot2 basada en los valores de Y, pero me gustaría poder establecer los colores manualmente. Este ejemplo es casi lo que necesito, pero establece los límites de la paleta de colores en función de los valores de Y, mientras que yo quiero establecerlos manualmente en función de un umbral de estrés biológico.

Aquí tienes un código de ejemplo basado en el ejemplo vinculado.

d <- data.frame(x = 1:4, y = c(0.1, 0.3, 1, 0.6))

# Interpolar valores desde cero hasta y y crear el número correspondiente de valores de x
vals <- lapply(d$y, function(y) seq(0, y, by = 0.01))
y <- unlist(vals)
mid <- rep(d$x, lengths(vals))
d2 <- data.frame(x = mid - 0.4,
                 xend = mid + 0.4,
                 y = y,
                 yend = y)

ggplot(data = d2, aes(x = x, xend = xend, y = y, yend = yend, color = y)) +
  geom_segment(size = 2) +
  scale_color_gradient2(low = "green4", mid = "yellow", high = "red", 
                        midpoint = max(d2$y)/2) +
  coord_cartesian(ylim = c(0, 2))

Me gustaría que el color rojo aparezca cuando el valor de Y sea igual a 2, en lugar de tomar el valor máximo de Y en el marco de datos.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para establecer manualmente los límites de la paleta de colores en función de un umbral de estrés biológico en lugar del valor máximo de Y en el marco de datos, puedes utilizar el argumento “limits” en la función “scale_color_gradient2”. Aquí tienes un ejemplo de código actualizado basado en el original:

    d <- data.frame(x = 1:4, y = c(0.1, 0.3, 1, 0.6))
    threshold <- 0.5 # establece el umbral de estrés biológico
    
    # interpola los valores desde cero hasta y y crea la cantidad correspondiente de valores x
    vals <- lapply(d$y, function(y) seq(0, y, by = 0.01))
    y <- unlist(vals)
    mid <- rep(d$x, lengths(vals))
    d2 <- data.frame(x = mid - 0.4,
                     xend = mid + 0.4,
                     y = y,
                     yend = y)
    
    ggplot(data = d2, aes(x = x, xend = xend, y = y, yend = y, color = y)) +
      geom_segment(size = 2) +
      scale_color_gradient2(low = "green4", mid = "yellow", high = "red", 
                            midpoint = threshold, limits = c(0, threshold, 2)) +
      coord_cartesian(ylim = c(0 , 2))
    

    En este código modificado, hemos agregado una variable “threshold” y la hemos establecido en el valor deseado del umbral de estrés biológico. Luego, hemos reemplazado “max(d2$y)/2” por “threshold” en el argumento “midpoint” de “scale_color_gradient2”. Por último, hemos establecido manualmente los límites de la escala de colores utilizando el argumento “limits” en “scale_color_gradient2”. Los límites se establecen en “c(0, threshold, 2)” para incluir todos los valores entre 0 y el umbral de estrés en verde, los valores entre el umbral y 2 en el gradiente elegido, y cualquier valor por encima de 2 en rojo.

    Esto dará como resultado un gráfico de barras en “ggplot2” con un relleno degradado basado en los valores de Y, utilizando colores y límites establecidos manualmente en función de un umbral específico de estrés biológico.

Comments are closed.