fbpx

Podemos utilizar estos datos de prueba

# datos de prueba
data <- data.frame(x = c(1, 2, 3, 4, 5),
                   value = c(0.7, -0.1, 0.3, -0.5,0.2)) 

Una forma de trabajarlo es la siguiente (deben haber muchas más). Primero calculamos si el signo es positivo o negativo con la función sign() y lo guardamos en una columna de los datos. Después calculamos el color que queremos con la función ifelse, que lo que hace es que si el valor es positivo regresa «green» y sino regresa «red». El código:

# calculando el signo de cada barra
data$signo <- sign(data$value)

# calculando el color para cada barra
data$color <- ifelse(signo >= 0, "green", "red")

Ya después utilizamos esa información en las gráficas. Dejo el código para rbase y ggplot2

# graficando con r base
barplot(data$value,
        col = data$color)

# graficando con ggplot2
library(ggplot2)
ggplot(data, aes(x = x, 
                 y = value,
                 fill = factor(sign(data$value))
                 )
       ) +
  geom_bar(stat = 'identity') +
  scale_fill_manual(values=c("red", "green")) +
  theme(legend.position = "none")

Gráfica de R Base

Gráfica de ggplot2

Respuesta a pregunta de este vídeo