Я не могу перенести свои участки в одну сетку, пожалуйста, помогите исправить мой код

#r #for-loop #ggplot2 #ggpubr #cowplot

Вопрос:

У меня есть 11 графиков, и я использовал функцию зацикливания для их построения, см. Мой код ниже. Однако я не могу заставить их поместиться всего на 1 странице или меньше. Участки на самом деле слишком большие. Я использую программное обеспечение R и пишу свою работу в RMarkdown. Я потратил почти целую неделю, пытаясь решить эту проблему.

   group_by(Firm_category) %>%
  doo(
    ~ggboxplot(
      data =., x = "Means.type", y = "means",
      fill ="grey", palette = "npg", legend = "none",
      ggtheme = theme_pubr()
      ), 
    result = "plots"
  )
graph3

# Add statistical tests to each corresponding plot

Firm_category <- graph3$Firm_category
xx <- for(i in 1:length(Firm_category)){
  graph3.i <- graph3$plots[[i]]   
    labs(title = Firm_category[i])  
    stat_pvalue_manual(stat.test[i, ], label = "p.adj.signif")
  print(graph3.i)
}

#output3.long data sample below as comments
#Firm_category  billmonth  Means.type  means
#Agric          1           Before       38.4444
#Agric          1           After        51.9

 

Полные данные есть на моем github: https://github.com/Fridahnyakundi/Descriptives-in-R/blob/master/Output3.csv
Этот код печатает все графики, но примерно на 4 страницах. Я хочу сгруппировать их в сетку. Я попытался добавить все эти коды ниже как раз перед моей последней фигурной скобкой, и ни один из них не работает, пожалуйста, помогите мне.

 library(cowplot)
print(plot_grid(plotlist = graph3.i[1:11], nrow = 4, ncol = 3))

library(ggpubr)
print(ggarrange(graph3.i[1:11], nrow = 4, ncol = 3))
 

Я также попробовал команду gridExtra (все они, похоже, делают одно и то же). Это я допустил ошибку, и я думаю, что это связано с моим списком. Я читал здесь много подобных работ, некоторые предлагали

 dev.new() 
dev.off()
 

Я все еще не понимал, что они делают. Но добавление любого из них привело к остановке моего кода.
Я попытался определить свою функцию цикла «для», скажем, назовите ее «XX», а затем вызовите ее, чтобы составить список графиков, но она вернула нулевой вывод.

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

Комментарии:

1. Было бы лучше, если бы вы предоставили воспроизводимый пример … чтобы люди могли просто вставить ваш код, запустить его и посмотреть, что происходит ..

2. @MrSmithGoesToWashington Первый код такой, какой он есть. Я пытаюсь добавить свои данные сюда (вывод 3.длинный), но позвольте мне посмотреть, смогу ли я отредактировать вопрос, чтобы добавить данные. Спасибо за ваш комментарий

3. @MrSmithGoesToWashington Я добавил ссылку на свои данные в вопросе, но вы также можете увидеть ее здесь: github.com/Fridahnyakundi/Descriptives-in-R/blob/master/…

4. Хорошо для данных .. вы также могли бы использовать команду dput … в любом случае ваш код все еще не полностью воспроизводим : функции doo, ggboxplot .. и конвейер %>% не являются базовыми R .. поэтому, прежде чем кто-то ответит на ваш вопрос, он должен угадать и найти все пакеты, которые вы используете … и есть большая вероятность, что он сдастся, прежде чем начнет думать о вашей проблеме ..

5. А также откуда он берется stat.test ?

Ответ №1:

Я пытался завершить ваш код … и это работает (но у меня нет вашего объекта «stat.test»). В принципе, я добавил graph3.i <- list() и заменил graph3.i в цикле .. Это то, что ты хотел сделать ?

 
library(magrittr)
library(dplyr)
library(rstatix)
library(ggplot2)
library(ggpubr)
data <- read.csv(url('http://raw.githubusercontent.com/Fridahnyakundi/Descriptives-in-R/master/Output3.csv'))
graph3 <- data %>% group_by(Firm_category) %>%
  doo(
    ~ggboxplot(
      data =., x = "Means.type", y = "means",
      fill ="grey", palette = "npg", legend = "none",
      ggtheme = theme_pubr()
    ), 
    result = "plots"
  )
graph3

# Add statistical tests to each corresponding plot
graph3.i <- list()
Firm_category <- graph3$Firm_category
xx <- for(i in 1:length(Firm_category)){
  graph3.i[[i]] <- graph3$plots[[i]]   
    labs(title = Firm_category[i]) #  
    # stat_pvalue_manual(stat.test[i, ], label = "p.adj.signif")
  print(graph3.i)
}


library(cowplot)
print(plot_grid(plotlist = graph3.i[1:11], nrow = 4, ncol = 3))