Paul Endymion
Paul Endymion

Reputation: 561

Linear color gradient inside ggplot histogram columns

I am trying to reproduce this plot with ggplot2 :

enter image description here

From what I understood you can call it a histogram with linear color gradient

I stuck on this linear color gradient, I can't figure how to reproduce it within each columns.

I found one work around on another post here :Trying to apply color gradient on histogram in ggplot

But it is quite an old one and does not look well with my data, also it is more a "categorical coloring" than a "gradient coloring".

I found also this one : Plot background colour in gradient but it only applies the gradient on the plot background and not in the columns.

This could be tested using the iris dataset :

ggplot(iris, aes(x=Species, fill=Petal.Width)) +
    geom_histogram(stat = "count")

Where the Petal.Width values of each Species would be used as a coloring gradient for each columns of the histogram with a color legend as in the example plot.

Any help is welcome !

Upvotes: 1

Views: 406

Answers (1)

amatsuo_net
amatsuo_net

Reputation: 2448

As the data is not provided, I use a toy example.

The point is to have two variables one for colouring (grad) and another for the x-axis (x in the example). You need to use desc() to make the higher values placed on the higher position in each bin.

library(tidyverse)

n <- 10000
grad <- runif(n, min = 0, max = 100) %>% round()
x <- sample(letters, size = n, replace = T)

tibble(x, grad) %>%
ggplot(aes(x = x, group = desc(grad), fill = grad)) + 
geom_bar(stat = 'count') + 
scale_fill_viridis_c()

Created on 2020-05-14 by the reprex package (v0.3.0)

Or, using iris, the example is like:

library(tidyverse)
ggplot(iris, aes(x=Species, group = desc(Petal.Width), fill=Petal.Width)) +
geom_histogram(stat = "count") + 
scale_fill_viridis_c()
#> Warning: Ignoring unknown parameters: binwidth, bins, pad

Created on 2020-05-14 by the reprex package (v0.3.0)

Upvotes: 3

Related Questions