2015-05-22 2 views
1

Я хотел бы поместить звездочки в свой групповой барплот (база R), чтобы указать, где парные сравнения значительно различаются. Я знаю, как разместить эти звезды, используя команду points. Однако из сообщений, которые я читал sofar, кажется, что нужно найти правильные координаты вручную (например, группа I: x = 0,635, y = 26, см. Код ниже). Это займет довольно много времени, если нужно найти это для всех значимых пар.Как упростить размещение звездочек в штриховом шкафу?

Так что мой вопрос: есть ли более простой способ найти координаты, соответствующие середине и рядом с парными барами? Я бы предпочел сделать это в системе построения базы данных в настоящий момент, но ответы ggplot также приветствуются. Заранее большое спасибо!

Пример данных

set.seed(123) 
dat<-matrix(runif(32, min = 0.5, max = 1), nrow=2, ncol=16) 
colnames(dat)<-c(LETTERS[1:16]) 

par(mar=c(2,4,2,2)) 
mp<-barplot(dat, col=c("blue","red"), beside=TRUE, horiz=TRUE, xpd=FALSE, axes=FALSE, axisnames=TRUE, cex.names=0.8, las=2, xlim=c(0.5,1.0), main="Data Example") 

axis(1, at=seq(0.5,1.0, by=0.1)) 
axis(2, at=mp, labels=FALSE, tick=FALSE) 

points(x=0.635, y=26, pch="*", cex=2) #sign position at I 

enter image description here

+0

Я не понимаю, что ваш призыв к 'оси (2, ...)' для? Кроме того, как вы определили '0,635'? – Cath

+0

Вы правы, фактически 'axis (2, ...)' избыточно. 0,635 определяется вручную, проб и ошибок. Так что это в основном мой вопрос: как получить эту соответствующую координату более простым способом, она хранится где-то в сюжете? –

+0

Итак, отвечает ли мой ответ на ваши потребности? (Я имею в виду, правильно ли я понял ваш запрос?). Вы можете позже определить «смещение» (0,01 здесь) в соответствии с интервалом между тиками, например, чтобы убедиться, что он не зависит от диапазона. – Cath

ответ

2

Допустим, у вас есть вектор, сообщающее, какие пары являются существенными. Например:

sign <- rep(TRUE, 16) ; sign[c(5, 7, 13:14)] <- FALSE 

вы уже знаете у координаты букв:

colMeans(mp) 

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

ord_sign <- colMeans(mp)[sign] 

Для координаты х, вы можете разместить их, например, 0,01 балла справа от максимального значения:

abs_sign <- apply(dat, 2, max)[sign] + 0.01 

Затем вы можете нарисовать все звездочки сразу:

points(x=abs_sign, y=ord_sign, pch="*", cex=2) 

enter image description here

Смежные вопросы