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.

Cómo trazar valores negativos utilizando ggplot geom_col evitando la interpolación de valores.

Tengo el siguiente marco de datos:

dat <- structure(list(kd_hdp = c(
  -1.30681818181818, -0.896, -0.952,
  -0.952, -1.208, -1.108, -1.108, -1.008
), dose = structure(c(
  3L,
  3L, 3L, 3L, 3L, 3L, 3L, 3L
), .Label = c(
  "0.3mM", "1mM", "3mM",
  "10mM", "20mM"
), class = "factor"), status = structure(c(
  1L,
  4L, 4L, 3L, 1L, 1L, 1L, 2L
), .Label = c(
  "-", "+", "++", "+++",
  "++++"
), class = "factor")), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -8L))

Los datos se ven así:

> dat
# A tibble: 8 × 3
  kd_hdp dose  status
      
1 -1.31  3mM   -     
2 -0.896 3mM   +++   
3 -0.952 3mM   +++   
4 -0.952 3mM   ++    
5 -1.21  3mM   -     
6 -1.11  3mM   -     
7 -1.11  3mM   -     
8 -1.01  3mM   +    

Cuando lo grafico con el siguiente código:

library(tidyverse)
ggplot(dat, aes(x = status, y = kd_hdp)) + 
  geom_col() + 
  theme(axis.text.x=element_text(  size = 25), 
        axis.text.y=element_text( size = 25) 
  ) 

Obtengo esto:

enter image description here

Observa que el eje Y del gráfico se extiende hasta > -4 mientras que el valor más bajo de kd_hdp es -1.21.
¿Cómo puedo hacer que ggplot produzca un eje Y con el valor exacto de los datos de entrada?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Este problema es causado por la configuración predeterminada de ggplot2, que automáticamente expande el rango del eje y para dejar espacio para valores atípicos o etiquetas potenciales. Para hacer que ggplot2 produzca un eje y con valores exactos como en los datos de entrada, podemos utilizar la función scale_y_continuous y establecer su argumento limits a los valores mínimo y máximo de kd_hdp. Aquí está el código modificado:

    {r}
    ggplot(dat, aes(x = status, y = kd_hdp)) +
    geom_col() +
    scale_y_continuous(limits = c(min(dat$kd_hdp), max(dat$kd_hdp))) +
    theme(axis.text.x=element_text(size = 25),
    axis.text.y=element_text(size = 25))

    Esto debería producir un gráfico con un eje y que tenga los valores exactos de los datos de entrada.

Comments are closed.