【发布时间】:2011-12-23 22:06:52
【问题描述】:
我有一个数据集,其中包含四个类别的百分比:前两个类别是“正数”,后两个类别是“负数”,所以我想对齐 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) 添加底部两个类别之外,我想不出任何办法。
这是我编写的代码(我实际上用par(mfrow=c(1, 10) 绘制了 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="")
您可以看到部分成品here或下图:
谁能想到一个更优雅的方法来做到这一点?
【问题讨论】: