У меня есть набор данных с процентами в четырех категориях: две верхние категории являются «положительными», а две нижние категории являются «отрицательными», поэтому я хочу выровнять границу между 2 и 3, чтобы это была нулевая точка на всехбары.(Я строю пары баров: на множестве баров для ext.obs = 0 и один для ext.obs = 1.) Вот часть данных:
structure(list(ext.obs = c(0, 0, 0, 1, 1, 1), comp = c(1, 2,
3, 1, 2, 3), `1` = c(0.00617283950617284, 0.00609756097560976,
0.0111111111111111, 0, 0, 0), `2` = c(0.154320987654321, 0.195121951219512,
0.161111111111111, 0.211180124223602, 0.392638036809816, 0.23030303030303
), `3` = c(0.709876543209877, 0.676829268292683, 0.666666666666667,
0.745341614906832, 0.521472392638037, 0.721212121212121), `4` = c(0.12962962962963,
0.121951219512195, 0.161111111111111, 0.0434782608695652, 0.0858895705521472,
0.0484848484848485)), .Names = c("ext.obs", "comp", "1", "2",
"3", "4"), row.names = c(1L, 2L, 3L, 11L, 12L, 13L), class = "data.frame")
Я бы хотел бытьв состоянии собрать матрицу с этими данными, которые я могу просто сделать barplot(datamatrix)
и получится хорошо.Но я не могу придумать никакого другого способа, кроме как построить две верхние категории, а затем добавить две нижние категории, используя barplot(..., add=T)
.
Вот код, который я написал (на самом деле я строю 10 пар баров с par(mfrow=c(1, 10)
), хотя цикл for(i in 1:10)
):
bar.loc <- barplot(t(as.matrix(tab3[c(i, i+10), c(5,6)])),
ylim=c(-0.5, 1.0),
col=my.pal[3:4],
xaxt="n",
yaxt="n",
ylab="",
xlab=components[i]
)
barplot(t(as.matrix(tab3[c(i, i+10), c(4, 3)]*(-1))),
add=T,
col=my.pal[2:1],
yaxt="n",
xaxt="n",
ylab="",
xlab="")
Вы можете увидеть часть готового продукта здесь или изображение ниже:
Кто-нибудь может придумать более элегантный способ сделать это?