Чтобы контролировать расстояние между полями boxplot()
, мы можем использовать опцию at
, которая "по умолчанию равна 1: n, где n - количество ящиков" . Вместо значения по умолчанию мы предоставляем вектор VEC
.
Для контроля размера меток оси мы можем использовать cex.axis
, например, cex.axis=.8
.
Пример
Я использую данные со страницы справки ?boxplot
например, который не занимает много места.
len
должен быть сгруппирован в соответствии с dose ~ supp
. Таким образом, количество ящиков составляет prod
число dim
включений соответствующих table
. С помощью этой информации мы создаем вектор VEC
из последовательности длиной n
(с некоторой настройкой с учетом регистра), из которой мы вычитаем требуемую корректировку из каждого второго элемента.
n <- prod(dim(with(ToothGrowth, table(dose, supp))))
VEC <- seq(1, n/2, length.out=n)*2 - c(0, .2)
# [1] 2.0 2.6 3.6 4.2 5.2 5.8
Сравнение графиков
op <- par(mfrow=c(2, 1))
# without grouping
boxplot(len ~ dose:supp, data=ToothGrowth,
boxwex=0.5, col=c("orange", "yellow"),
main="Guinea Pigs' Tooth Growth",
xlab="Vitamin C dose mg", ylab="tooth length",
sep=":", lex.order=TRUE, ylim=c(0, 35), yaxs="i",
cex.axis=.8)
text(.5, 32, "w/o grouping", col=2, adj=0, font=2)
# with grouping
boxplot(len ~ dose:supp, data=ToothGrowth,
boxwex=0.5, col=c("orange", "yellow"),
main="Guinea Pigs' Tooth Growth",
xlab="Vitamin C dose mg", ylab="tooth length",
sep=":", lex.order=TRUE, ylim=c(0, 35), yaxs="i",
cex.axis=.8, at=VEC)
text(1.5, 32, "w/ grouping", col=2, adj=0, font=2)
par(op)
Это, конечно, может потребовать некоторой корректировки с учетом конкретного случая, но у вас есть идея сейчас.