Is this the sort of thing you want to do? I think it is confusing to label the gradient legend with ranges but it can be done.
#Invent data
set.seed(1)
DF <- data.frame(x=rep(1:4,4),y=rep(1:4,each=4),Conc=runif(16,min=1,max=4))
#Make plot
library(ggplot2)
ggplot(DF,aes(x=x,y=y,fill=Conc))+geom_tile()+
scale_fill_gradient(low = "green", high = "red",
limits=c(1,4),
breaks=1:4,
labels=c("-5 - 0","0 - 3","3 - 6","6 - 10"))

Created on 2021-01-27 by the reprex package (v0.3.0)