rggplot2colorsbar-chartcolorbrewer

horizontal barplot with color gradient from top to bottom of the graphic


I would like to fill the bars in a gradient of color from the top to the bottom of the graphic. That is, regardless of the bar lenght, the color should be getting lighter trhough the top to the bottom direction. I created 2 SIMULATIONS in the photoshop. The first one (Fig. 1) is that ploted through the follow script (long bars are dark and short bars are light). However the seconde one (Fig. 2) is that I would like to elaborate (the top bars are dark and get lighter in the bottom direction).

Fig, 1

Fig. 2

specie	momento	M1_sava
zr	M1	1
yr	M1	0.86
xr	M1	1
wr	M1	1
vr	M1	1
ur	M1	0.74
tr	M1	0.39
sr	M1	0.83
rr	M1	0.83
qr	M1	0
pr	M1	0.7
or	M1	0.11
nr	M1	1
mr	M1	0
lr	M1	0
kr	M1	0
jr	M1	0
Ir	M1	0.83
hr	M1	0
Gr	M1	0
fr	M1	0
er	M1	0
dr	M1	0
cr	M1	0.04
br	M1	0
ar	M1	0
zr	M2	0.33
yr	M2	0.86
xr	M2	0.39
wr	M2	0.02
vr	M2	0.07
ur	M2	0.02
tr	M2	0.87
sr	M2	0.06
rr	M2	0.63
qr	M2	0.33
pr	M2	0.91
or	M2	0.67
nr	M2	0.18
mr	M2	0.08
lr	M2	0
kr	M2	0
jr	M2	0
Ir	M2	0
hr	M2	0.08
Gr	M2	0
fr	M2	0.04
er	M2	0
dr	M2	0
cr	M2	0
br	M2	0
ar	M2	0
zr	M3	0.04
yr	M3	0.32
xr	M3	0.02
wr	M3	0
vr	M3	0
ur	M3	0
tr	M3	0.96
sr	M3	0.06
rr	M3	0.18
qr	M3	0.33
pr	M3	0.63
or	M3	1
nr	M3	0
mr	M3	0.94
lr	M3	0.17
kr	M3	0
jr	M3	0.41
Ir	M3	0.04
hr	M3	0.44
Gr	M3	0.17
fr	M3	0.02
er	M3	0
dr	M3	0
cr	M3	0
br	M3	0
ar	M3	0
zr	M4	0
yr	M4	0
xr	M4	0
wr	M4	0
vr	M4	0
ur	M4	0
tr	M4	0.89
sr	M4	0
rr	M4	0.03
qr	M4	0.22
pr	M4	0.41
or	M4	0.46
nr	M4	0
mr	M4	0.81
lr	M4	0.39
kr	M4	0.7
jr	M4	0.7
Ir	M4	0
hr	M4	0.87
Gr	M4	0.91
fr	M4	0.33
er	M4	0.37
dr	M4	0.24
cr	M4	0.15
br	M4	0
ar	M4	0
Dataset <- read.csv(file = "data.csv", header = TRUE, sep = ";")
attach(Dataset)
library(ggplot2)
ggplot(Dataset, aes(specie, M1_sava)) + 
  facet_wrap(~ momento, nrow = 1) + 
  coord_flip() + 
  geom_col(aes(fill = M1_sava)) + 
  scale_fill_gradient2(low = "white", high = "red") + 
  theme_bw(base_size = 10) 


Solution

  • Your code is almost there, you just got the color variable wrong.
    (Also, don't attach data, please.)

    library(ggplot2)
    
    ggplot(Dataset, aes(specie, M1_sava)) + 
      facet_wrap(~ momento, nrow = 1) + 
      coord_flip() + 
      geom_col(aes(fill = as.numeric(specie))) + 
      scale_fill_gradient2(low = "white", high = "red") + 
      theme_bw(base_size = 10) 
    

    enter image description here

    Data in dput format.

    Dataset <-
    structure(list(specie = structure(c(26L, 25L, 24L, 23L, 22L, 
    21L, 20L, 19L, 18L, 17L, 16L, 15L, 14L, 13L, 12L, 11L, 10L, 9L, 
    8L, 7L, 6L, 5L, 4L, 3L, 2L, 1L, 26L, 25L, 24L, 23L, 22L, 21L, 
    20L, 19L, 18L, 17L, 16L, 15L, 14L, 13L, 12L, 11L, 10L, 9L, 8L, 
    7L, 6L, 5L, 4L, 3L, 2L, 1L, 26L, 25L, 24L, 23L, 22L, 21L, 20L, 
    19L, 18L, 17L, 16L, 15L, 14L, 13L, 12L, 11L, 10L, 9L, 8L, 7L, 
    6L, 5L, 4L, 3L, 2L, 1L, 26L, 25L, 24L, 23L, 22L, 21L, 20L, 19L, 
    18L, 17L, 16L, 15L, 14L, 13L, 12L, 11L, 10L, 9L, 8L, 7L, 6L, 
    5L, 4L, 3L, 2L, 1L), .Label = c("ar", "br", "cr", "dr", "er", 
    "fr", "Gr", "hr", "Ir", "jr", "kr", "lr", "mr", "nr", "or", "pr", 
    "qr", "rr", "sr", "tr", "ur", "vr", "wr", "xr", "yr", "zr"), class = "factor"), 
        momento = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
        1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
        1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
        2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 
        3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
        3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 
        4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
        4L, 4L, 4L, 4L, 4L), .Label = c("M1", "M2", "M3", "M4"), class = "factor"), 
        M1_sava = c(1, 0.86, 1, 1, 1, 0.74, 0.39, 0.83, 0.83, 0, 
        0.7, 0.11, 1, 0, 0, 0, 0, 0.83, 0, 0, 0, 0, 0, 0.04, 0, 0, 
        0.33, 0.86, 0.39, 0.02, 0.07, 0.02, 0.87, 0.06, 0.63, 0.33, 
        0.91, 0.67, 0.18, 0.08, 0, 0, 0, 0, 0.08, 0, 0.04, 0, 0, 
        0, 0, 0, 0.04, 0.32, 0.02, 0, 0, 0, 0.96, 0.06, 0.18, 0.33, 
        0.63, 1, 0, 0.94, 0.17, 0, 0.41, 0.04, 0.44, 0.17, 0.02, 
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.89, 0, 0.03, 0.22, 0.41, 
        0.46, 0, 0.81, 0.39, 0.7, 0.7, 0, 0.87, 0.91, 0.33, 0.37, 
        0.24, 0.15, 0, 0)), class = "data.frame", row.names = c(NA, 
    -104L))