Построение нескольких групп ящиков в бок о бок в R

Я пытаюсь построить два ящика в одном и том же сюжете, каждый в той же категории. Я могу генерировать ящики в отдельности, но я в тупик, когда пытаюсь получить их на один и тот же график.

Вот что я до сих пор:

a<-matrix(nrow=100,ncol=3,data=runif(300,max=2))
b<-matrix(nrow=100,ncol=3,data=runif(300,max=1))
colnames(a)<-c("case 1","case 2","case 3")
colnames(b)<-c("case 1","case 2","case 3")
boxplot(cbind(a,b))

Этот график приводит к 6 ящикам, сначала 3 для a, затем 3 для b.

Есть ли трюк/простой вариант, который мне не хватает, что даст мне первое значение для a и b, затем второе и, наконец, третий набор значений, все построенные таким образом, что на оси x имеется только три тика, по одному для каждого из множеств?

Любые указатели очень оценили,

Иэйн

Ответ 1

boxplot(a, at = 0:2*3 + 1, xlim = c(0, 9), ylim = range(a, b), xaxt = "n")
boxplot(b, at = 0:2*3 + 2, xaxt = "n", add = TRUE)
axis(1, at = 0:2*3 + 1.5, labels = colnames(a), tick = TRUE)

Обратите внимание на параметр ylim = range(a, b). Шкала сюжета определяется первой командой, но если b содержит значения вне диапазона значений в (не в этом случае, но попробуйте поменять a и b), они будут лежать из графика. Вот почему в общем вы должны указать здесь илим.

Вы также можете установить tick = FALSE в команде axis(), я думаю, что это лучше. Если вам не нравится пространство между группами, используйте 0:2*2 вместо 0:2*3 и соответствующим образом измените xlim.