Ответ 1
## dummy data
dat <- data.frame(Depth = sample(c(3:6), 20, replace = TRUE), OM = 5 * runif(20))
Добавьте место для меток и аннотаций оси y, сделав маржу больше в левой части графика (side = 2
):
## margin for side 2 is 7 lines in size
op <- par(mar = c(5,7,4,2) + 0.1) ## default is c(5,4,4,2) + 0.1
Теперь сюжет:
## draw the plot but without annotation
boxplot(OM ~ Depth, data = dat, axes = FALSE, ann = FALSE)
## add axes
axis(1, at = 1:4, labels = c(" ", "Shallow", "Deep", " "), cex.axis = 1.5)
axis(2, cex.axis = 2)
## now draw the y-axis annotation on a different line out from the plot
## using the extra margin space:
title(ylab = "Loss of Percent Organic Matter per Year", cex.lab = 1.5,
line = 4.5)
## draw the box to finish off
box()
Затем reset поля графика:
par(op)
Это дает:
Таким образом, мы создали дополнительное пространство для поля графика на стороне 2, а затем выделили оси и аннотацию (ylab
) отдельно, чтобы контролировать, как график отложен.
Итак, ключ к этой строке:
op <- par(mar = c(5,7,4,2) + 0.1) ## default is c(5,4,4,2) + 0.1
Что мы делаем, это сохранить исходные графические параметры в объекте op
, и, чтобы изменить размеры полей (в строках) на 5, 7, 4, 2 и 0,1 строки каждый для нижнее, левое, верхнее и правое поля соответственно. Строка выше показывает значения по умолчанию, поэтому код дает еще 2 строки на левом поле, чем обычно предоставляется по умолчанию.
Затем, когда мы рисуем метку оси y с помощью title()
, мы указываем, какую строку (из 7) нарисовать метку в:
title(ylab = "Loss of Percent Organic Matter per Year", cex.lab = 1.5,
line = 4.5)
Здесь я использовал строку 4.5
, но 5
тоже работал. Чем больше значения 'line'
, тем дальше от графика выводится метка.
Хитрость заключается в том, чтобы найти значение для левого поля и значение 'line'
в вызове title()
, что позволяет отмечать отметки оси и метку оси не перекрываться. Вероятно, пробная версия и ошибка - лучшее решение для поиска нужных вам значений с базовой графикой.