I am not a specialist in basics, so maybe my solution is not very simple. I think using ggplot2 is better here.

def.par <- par(no.readonly = TRUE) ## divide device into two rows and 1 column ## allocate figure 1 for barplot ## allocate figure 2 for barplot labels ## respect relations between widths and heights nf <- layout(matrix(c(1,1,2,2),2,2,byrow = TRUE), c(1,3), c(3,1), TRUE) layout.show(nf) ## barplot par(mar = c(0,1,1,1)) set.seed(1) nKol <- 8 ## you can change here but more than 11 cols ## the solution is not really readable data <- matrix(sample(1:4,nKol*4,rep=TRUE),ncol=nKol) xx <- barplot(data, beside=TRUE, col=c("darkred","red","grey20","grey40")) ## labels , create d ummy plot for sacles par(mar = c(1,1,0,1)) plot(seq_len(length(xx)),rep(1,length(xx)),type='n',axes=FALSE) ## Create some text labels labels <- paste("Label", seq_len(ncol(xx)), sep = " ") ## Plot text labels with some rotation at the top of the current figure text(seq_len(length(xx)),rep(1.4,length(xx)), srt = 90, adj = 1, labels = labels, xpd = TRUE,cex=0.8,srt=60, col=c("darkred","red","grey20","grey40")) par(def.par) #- reset to default