Подтвердить что ты не робот

Как разместить больше пробелов между метками оси и заголовком оси в ячейке R

Я создаю boxplot в R со следующим кодом:

boxplot(perc.OM.y ~ Depth, axes = F, ylim = c(-0.6, 0.2), xlim = c(3.5, 5.5),
        lwd = 0.1, col = 8, 
        ylab = "Loss of Percent Organic Matter per Year", cex.lab = 1.5)
axis(1, at = c(3.5, 4, 5, 5.5), labels = c(" ", "Shallow", "Deep", " "), 
     cex.axis = 1.5)
axis(2, cex.axis = 1.5)

Проблема заключается в том, что числовые метки на оси y в настоящее время перекрывают заголовок оси. Есть ли способ разместить больше пространства между заголовком оси и метками номера оси?

Спасибо

4b9b3361

Ответ 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)

Это дает:

boxplot

Таким образом, мы создали дополнительное пространство для поля графика на стороне 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(), что позволяет отмечать отметки оси и метку оси не перекрываться. Вероятно, пробная версия и ошибка - лучшее решение для поиска нужных вам значений с базовой графикой.

Ответ 2

Попробуйте установить более высокое значение mgp. Вы также захотите увеличить поля с помощью mar.

par(mgp=c(5,1,0))
par(mar=c(5,6,4,2)+0.1)

Ответ 3

Я просто нашел это решение очень простым и полезным, когда я хотел сжать белое пространство вокруг диаграммы (рассмотрим ограничения размера в документах конференции!), в то время как я хотел избежать совпадения названия Y-осей и больших чисел в качестве тиков.

Я использую, чтобы установить заголовки в виде текста и поместить их туда, где я хочу, после установки полей вручную:

Сначала установите поля на произвольные значения:

par( mar=c(m1, m2, m3, m4) ) 

где m1-m4 - поля для четырех сторон (1 = нижний, 2 = левый, 3 = верхний и 4 = правый).

Например:

par( mar=c(3.1, 4.7, 2.3, 0)) 

Затем, при построении графика, установите main = ", xlab =" "и ylab =" " (иначе их текст будет перекрываться с этим новым текстом)

Наконец, используя mtext(), установите заголовки оси и название диаграммы вручную:

mtext(side=1, text="X axes title", line=0.5)
mtext(side=2, text="Y axes title", line=3)
mtext(side=3, text="Diagram title", line=1.5)

Параметр линии - это расстояние от диаграммы (меньшие значения приближают его к диаграмме).