Как переместить метки оси Y от графика R, используя lapply в R - PullRequest
1 голос
/ 23 марта 2020

У меня есть следующий код (благодаря ответу @Rawr на этот вопрос ):

labes1 <- c("P(LNG)","","Volume(LNG)","","P(oil)","","Can.GDP","","US GDP","")
titles <- c("Levels","","","","","Log Difference","","","","")

par(mfrow = c(5, 2), mar = c(0.3, 6, 0, 2), oma = c(5, 0, 3, 2))
lapply(1:10, function(ii) {
  x <- plotdata1[, ii, drop = FALSE]
  plot(x, xlab = "Quarter", ylab = labes1[ii], axes = FALSE)
  axis(2, las = 1)
  box()
  if (ii %in% 9:10) {
    axis(1)
    title(xlab = 'Quarter', xpd = NA)
  }
  if (ii %in% 1:2)
    title(main = c('Levels', 'Log Difference')[ii], xpd = NA, line = 1)
})

Это дает следующий график:

enter image description here

Очевидная проблема заключается в наложении меток оси Y на значения оси Y. Я пытался поиграться с mar() и oma(), но они просто меняют границы, я надеялся, что это отодвинет все в сторону. Как я могу переместить метки оси Y отдельно от графика? Я также немного перенесу поля, чтобы пустое пространство между двумя столбцами графиков было ближе друг к другу.

1 Ответ

1 голос
/ 23 марта 2020

Вы можете определить ylab отдельно, как то, что вы делаете для xlab, и установить параметр line, чтобы определить его расстояние от графика (, как указано в этом посте ).

Я получил пример из объединения вашего кода и @ rawr из вашего предыдущего вопроса.

set.seed(1)
z <- ts(matrix(rt(200 * 10, df = 3), 200, 10), start = c(1961, 1), frequency = 12) 
z <- z * 1e5 # to make "wide" y-axis labels

## vectors of x, y, and main labels
xl <- sprintf('x label %s', 1:10)
yl <- sprintf('y label %s', 1:10)
ml <- sprintf('main label %s', 1:10)


labes1 <- c("P(LNG)","","Volume(LNG)","","P(oil)","","Can.GDP","","US GDP","")
titles <- c("Levels","","","","","Log Difference","","","","")

par(mfrow = c(5, 2), mar = c(0.3, 6, 0, 2), oma = c(5, 0, 3, 2))
lapply(1:10, function(ii) {
  x <- z[, ii, drop = FALSE]
  plot(x, xlab = "Quarter", ylab = "", axes = FALSE) # set ylab to ""
  axis(2, las = 1)
  title(ylab = labes1[ii], line = 4) # set the line at an appropriate distance 
  box()
  if (ii %in% 9:10) {
    axis(1)
    title(xlab = 'Quarter', xpd = NA)
  }
  if (ii %in% 1:2)
    title(main = c('Levels', 'Log Difference')[ii], xpd = NA, line = 1)
})

Приведенный выше код выводит следующий график для line = 4:

enter image description here

и этот участок для line = 3:

enter image description here

...