Предположим, у нас есть возрастная матрица, подобная этой:
ag
# 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80
# male 3.2 2.6 5 3.0 2.2 3.8 2.8 3.2 4.2 3.4 3.4 3.2 2.0 2.8 2.2 3
# female 4.6 2.6 4 2.4 1.8 2.8 1.8 3.0 2.8 5.2 3.6 4.2 2.4 2.8 3.0 3
Затем мы можем разделить строки и нарисовать две barplot
по отдельности, одна часть должна быть установлена в отрицательное значение.
ag.f <- - ag[1, ]
ag.m <- ag[2, ]
Нам нужно настроить xlim
и указать add=TRUE
на втором графике.
mwd <- max(range(ag)) +.5 # for adjustment
## barplots
b <- barplot(ag.f, horiz=T, xlim=c(-mwd, mwd), col=2, xaxt="n", yaxt="n") # plot left
barplot(ag.m, horiz=T, add=TRUE, col=4, xaxt="n", yaxt="n") # plot right
## axes
axis(1, at=(-5):5, labels=FALSE, tck=.02)
mtext(paste0(c(5:1, 0:5), "%"), 1, 1, at=(-5):5, las=1)
axis(2, b, labels=FALSE, tck=.02, lty=0)
mtext(colnames(ag), 2, 1, at=b, las=1)
## headers
text(-6, 21, "age", xpd=TRUE, font=2)
text(-2.5, 21, "female", xpd=TRUE, font=2)
text(2.5, 21, "male", xpd=TRUE, font=2)
Результат
Данные
ag <- structure(c(3.2, 4.6, 2.6, 2.6, 5, 4, 3, 2.4, 2.2, 1.8, 3.8,
2.8, 2.8, 1.8, 3.2, 3, 4.2, 2.8, 3.4, 5.2, 3.4, 3.6, 3.2, 4.2,
2, 2.4, 2.8, 2.8, 2.2, 3, 3, 3), .Dim = c(2L, 16L), .Dimnames = structure(list(
c("male", "female"), c("5", "10", "15", "20", "25", "30",
"35", "40", "45", "50", "55", "60", "65", "70", "75", "80"
)), .Names = c("", "")))