Here is a solution using ggplot2
:
levels <- c('low','med','high')
df <- data.frame(
sample = c("a","b","d","e","f","g","h","i","l","m"),
value = seq(0,1,length.out=10),
level = factor(levels[c(1,1,1,1,2,2,2,3,3,3)], level=rev(levels))
)
# require(ggplot2)
# require(grid)
ggplot(data=df, aes(x=TRUE, y=sample, fill=value)) + geom_tile() +
scale_fill_gradientn(colours=c('green','black','red')) +
facet_grid(level~., scales='free', space='free') +
scale_y_discrete(expand=c(0,0)) +
theme(panel.margin=unit(0.1,'mm'), axis.title=element_blank(),
axis.text.x=element_blank(), axis.ticks.x=element_blank(),
legend.title=element_blank())