Срединно-центрированные гистограммы - PullRequest
4 голосов
/ 24 декабря 2011

У меня есть набор данных с процентами в четырех категориях: две верхние категории являются «положительными», а две нижние категории являются «отрицательными», поэтому я хочу выровнять границу между 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="")

Вы можете увидеть часть готового продукта здесь или изображение ниже:

enter image description here

Кто-нибудь может придумать более элегантный способ сделать это?

1 Ответ

1 голос
/ 25 декабря 2011

Попробуйте это:

barplot( t(cbind(tab3[,5:6],-tab3[,6:5],-tab3[,4:3])),
    col=c('lightblue','darkblue',NA,NA,'tan','brown') )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...