R Создание графиков внутри цикла не соответствует размерам потока? - PullRequest
0 голосов
/ 02 октября 2018

Я написал цикл for для создания матрицы диаграмм, однако я написал код следующим образом

par(mfrow = c(4, 4))

for (i in c(6:17)) {
  print(ggpubr::ggboxplot(logdat, 
                          x = "Diagnostic", 
                          y = names(logdat)[i] , 
                          color = "Diagnostic", 
                          add = "jitter") + 
    stat_compare_means(comparisons = my_comparisons,
                       method = "t.test")) 
}

Показаны только отдельные графики, а не та матрица, которую я хочу

1 Ответ

0 голосов
/ 02 октября 2018

Вы используете ggboxplot из ggpubr, который основан на ggplot2, который основан на grid графической системе.К сожалению, grid графика не работает с base R графикой, поэтому настройка par также не работает.Для размещения графиков, созданных при сборке библиотеки поверх grid, используйте пакет grid.arrange из gridExtra.См. Пример ниже:

library(ggpubr)
data("ToothGrowth")
df <- ToothGrowth
grobsList <- list()
for (i in c(1:4)) {

  p <- ggboxplot(df, x = "dose", y = "len", width = 0.8)
  grobsList <- c(grobsList, list(p))
}


gridExtra::grid.arrange(
  grobs = grobsList, ncol = 2, nrow = 2)

Вы также можете попробовать использовать marrangeGrob, но это может создать график за пределами текущего графического окна.

Вы также можете визуализировать графики внутри циклакогда было создано желаемое количество участков:

library(ggpubr)
data("ToothGrowth")
df <- ToothGrowth
grobsList <- list()

for (i in c(1:7)) {

  p <- ggboxplot(df, x = "dose", y = "len", width = 0.8)
  grobsList <- c(grobsList, list(p))

  if(length(grobsList) == 4) {
    # print the result
    gridExtra::grid.arrange(
      grobs = grobsList, ncol = 2, nrow = 2)
    grobsList <- list() # reset the list containing the plots
  }
}

# print the remaining plots
if(length(grobsList) > 0) {
  gridExtra::grid.arrange(
    grobs = grobsList, ncol = 2, nrow = 2)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...