#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))