Это будет не самое элегантное, но простое решение.
1) Чтобы охватить весь регион - не начинайте свои прямоугольники с 0, пусть они начинаются с значений x ниже 0 и y- значения ниже 0.
2) Чтобы вывести блокпосты перед графиком, вызовите блокпост снова, после добавления прямоугольников, еще раз, с add=TRUE
Вот демонстрация :
boxplot(weight ~ feed, data=chickwts)
rect(-1000, -1000, 1.5, 1000, col=adjustcolor("red", 0.1))
rect(1.5, -1000, 3.5, 1000, col=adjustcolor("orange", 0.1))
rect(3.5, -1000, 5.5, 1000, col=adjustcolor("blue", 0.1))
rect(5.5, -1000, 1000, 1000, col=adjustcolor("green", 0.1))
boxplot(weight ~ feed, data=chickwts, add=TRUE)
Для более элегантного решения: начните с пустого графика, добавьте прямоугольники, затем добавьте прямоугольники в конце.
colors <- c("red", "orange", "blue", "green")
plot.new()
plot.window(xlim=c(0.5, length(unique(chickwts$feed))+0.5), ylim=range(chickwts$weight))
rect(c(-1000,1.5,3.5,5.5), -1000, c(1.5,3.5,5.5,1000), 1000, col=adjustcolor(colors, 0.1))
boxplot(weight ~ feed, data=chickwts, add=TRUE)
Что даст вам тот же результат.