Daniel James
Daniel James

Reputation: 1433

Barplot in Ggplot2: Auto-customized Colour Using R According to the Value of a Column

I want the colour in this barplot to be automatically filled with the minimum figure in RMSE column to be greenthe nest to the minimumRMSEfigures to beyellowgreenthe middle figure to beyellow, the second to the maximum RMSE to be orangewhile the maximum figure in the RMSE column to bered`.

df1 <- data.frame(Methods = c('b', 'a', 'c', 'd', 'e'), lb = c(9, 7, 9, 4, 9), RMSE = c(0.26177952, 0.11294586, 0.02452239, 0.08290467, 0.41488542))
ggplot2::ggplot(df1, ggplot2::aes(Methods, lb, fill = RMSE)) + # Using default colors 
  ggplot2::geom_bar(stat = "identity")# + col = rainbow(5)

I saw this online an I am imagining how it can hep me.

colfunc<-colorRampPalette(c("green", "yellowgreen", "yellow", "orange", "red"))
plot(rep(1,5),col=(colfunc(5)), pch=19,cex=2)

Upvotes: 0

Views: 47

Answers (1)

Jon Spring
Jon Spring

Reputation: 66970

Here's one option using a palette ("Spectral" from the ColorBrewer schemes built into ggplot2) that coincidentally includes a spectrum from green-yellow-orange-red. (It also includes blue, which I avoided using the values = c(-0.15,1) part -- that effectively says the numbers have to 15% lower than the actual range to be assigned blue, so it doesn't start using colors until the green range.

ggplot2::ggplot(df1, ggplot2::aes(Methods, lb, fill = RMSE)) + # Using default colors 
  ggplot2::geom_bar(stat = "identity") +
  ggplot2::scale_fill_distiller(palette = "Spectral", values = c(-0.15,1)))

enter image description here

If you want to color based on the ranking of RMSE rather than the value of RMSE, you could turn it into a factor and use the five colors by name:

ggplot2::ggplot(df1, ggplot2::aes(Methods, lb, fill = as.factor(RMSE))) + # Using default colors 
  ggplot2::geom_bar(stat = "identity") +
  ggplot2::scale_fill_manual(values = c("green", "yellowgreen", "yellow", "orange", "red"))

enter image description here

(Aesthetically you might want to pick other colors by their hex values, like maybe "#70B070" instead of "green" if you prefer certain specific colors.)

Upvotes: 1

Related Questions