Так как я должен был сделать это в любом случае, вот достаточно приблизительный пример, чтобы понять пример кода в соответствии с тем, что предлагает @Alex Brown (scores - это своего рода 2D-массив, который превратится в сгруппированный вектор):
barchart(scores, horizontal=FALSE, stack=FALSE,
xlab='Sample', ylab='Mean Score (max of 9)',
auto.key=list(rectangles=TRUE, points=FALSE),
panel=function(x, y, box.ratio, groups, errbars, ...) {
# We need to specify groups because it's not actually the 4th
# parameter
panel.barchart(x, y, box.ratio, groups=groups, ...)
x <- as.numeric(x)
nvals <- nlevels(groups)
groups <- as.numeric(groups)
box.width <- box.ratio / (1 + box.ratio)
for(i in unique(x)) {
ok <- x == i
width <- box.width / nvals
locs <- i + width * (groups[ok] - (nvals + 1)/2)
panel.arrows(locs, y[ok] + 0.5, scores.ses[,i], ...)
}
} )
Я не проверял это, но важные биты (части, определяющие местоположение и т. Д. В функции панели) работают. Это сложная часть, чтобы понять. В моем случае я фактически использовал panel.arrows для создания панелей ошибок (ужас!). Но Scores.ses должен быть массивом того же измерения, что и Score.
Попробую почистить это позже - но если кто-то захочет, я рад за это!