Запись и совместное использование процесса численного моделирования

анализ данных

Введение

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

Метод не обязательно лучший, и критика приветствуется. Так как работа еще продолжается, полный код на данном этапе раскрываться не будет.Некоторые коды и идеи написания кода приведены ниже.

весь рабочий процесс: Из-за разных параметров будут получены разные результаты. Моя цель — наконец визуализировать результаты симуляции с разными параметрами через график.

трудность: Каждый скрипт имеет большой объем кода и длительное время симуляции (10+ часов).Для удобства я строю скрипт с разными параметрами отдельно, а затем открываю несколько Rstudio для выполнения "ручных" параллельных операций и сохраняю Rdata и Rdata каждого скрипта, набор данных. Наконец, создайте новый сценарий R, загрузите результаты параметрического моделирования и постройте график. Окончательные результаты визуализации выглядят следующим образом:

图片

Каждая линия графика здесь исходит из Rdata (набора параметров), и весь график содержит результаты для трех разных наборов параметров.

Сначала посмотрите на эскизы кода и часть скрипта в каждом из моих скриптов:

图片代码缩略图

Уведомление:Для удобства просмотра я поместил все необходимые для моей работы функции вall_function.rсценарий, затем используйтеsource()загрузить его. Модификация параметров в скрипте это в основном числа, сигма, числа и так далее.

процесс работы

Процесс операции представлен ниже:

1. Откройте несколько Rstudio и запустите

Запустите код скрипта в каждом Rstudio.

2. Храните все Rdata и наборы данных в каждом R-скрипте.

код показывает, как показано ниже:

 write.xlsx(sheets, paste("./data/latex/sigma",sigma,"new2/R",numbers,"_",nums,"_",it,".xlsx",sep=""),
            colNames = T, rowNames = T)
 save.image(paste("./data/latex/sigma",sigma,"new2/R",numbers,"_",nums,"_",it,".Rdata",sep=""))

Уведомление:Вот небольшая хитрость, используйтеpaste()функция, автоматически различается по параметрам (здесьsigma,numbers,nums,it), изменить путь и имя файла (папка должна быть создана заранее).

Это результат запуска следующим образом.

3. Создайте новый скрипт R для рисования графики

имя файлаplot_all.r. Основная функция — отобразить данные, полученные скриптами с разными параметрами прямо сейчас, а затем с помощью соответствующего пакета синтезировать их в один график. Миниатюры кода можно увидеть в конце текста, здесь сначала представлены функции каждой функции. Если у вас возникли трудности с рисованием ggplot2, вы можете ввести [Визуализация] Получите рукопись учебника, а затем объедините ее с моей станцией B (аккаунт: Чжуан Янь)».Учебник по визуализации R",Возьмите быстрый старт.

  • plot_5_methodsФункция: использоватьggplot2package отображает столбец параметров в наборе данных (b/c/d/sigma) графика.
 plot_5_methods = function(dat = b_data){
   plot_5 = ggplot(dat,aes(class,value,fill = class)) + 
     geom_boxplot(na.rm = T) + 
     # scale_fill_viridis(discrete = TRUE, alpha=0.6) +
     stat_summary(fun.y=mean, na.rm=T, geom="point", shape=21, size=2, fill="red",color="red") +
     # geom_jitter(color="black", size=0.4, alpha=0.9) +
     # geom_hline(yintercept = yline) +
     theme_bw() +
     theme(
       legend.position="none",
       panel.grid.major = element_blank(),
       panel.grid.minor = element_blank(),
       plot.title = element_text(size=11)
     ) +
     ylab("") + 
     xlab("") 
   return(plot_5)
 }

  • all_plot_compareФункция: нарисовать все столбцы набора данных и объединить их по горизонтали, результат будет следующим:
 all_plot_compare = function(data1 = all_data_0.3,str1 = c(0, 3.5,0, 1,0, 10,0, 1.5)){
   ## b 
   b_data = data.frame("class" = factor(rep(c("GH","TS","BT","Pooled","Fixed"),each = dim1),
                                        levels = c("GH","TS","BT","Pooled","Fixed")),
                       "value" = c(data1[,1],data1[,5],data1[,9],data1[,13],data1[,17]))
   b_plot = plot_5_methods(dat = b_data) +
     geom_hline(yintercept = b,linetype = 3) +
     scale_y_continuous(limits = str1[1:2]) + 
     xlab(expression(b)) + 
     scale_fill_manual(values = col1) 
   ## c 
   c_data = data.frame("class" = factor(rep(c("GH","TS","BT","Pooled","Fixed"),each = dim1),
                                        levels = c("GH","TS","BT","Pooled","Fixed")),
                       "value" = c(data1[,2],data1[,6],data1[,10],data1[,14],data1[,18]))
   c_plot = plot_5_methods(dat = c_data) + 
     geom_hline(yintercept = c,linetype = 3) +
     scale_y_continuous(limits = str1[3:4]) + 
     xlab(expression(c)) + 
     scale_fill_manual(values = col1) 
   ## d
   d_data = data.frame("class" = factor(rep(c("GH","TS","BT","Pooled","Fixed"),each = dim1),
                                        levels = c("GH","TS","BT","Pooled","Fixed")),
                       "value" = c(data1[,3],data1[,7],data1[,11],data1[,15],data1[,19]))
   d_plot = plot_5_methods(dat = d_data) +
     geom_hline(yintercept = d,linetype = 3) +
     scale_y_continuous(limits = str1[5:6]) + 
     xlab(expression(d)) +  
     scale_fill_manual(values = col1) 
   ## sigma
   sigma_data = data.frame("class" = factor(rep(c("GH","TS","BT"),each = dim1),
                                            levels = c("GH","TS","BT")),
                           "value" = c(data1[,4],data1[,8],data1[,12]))
   sigma_plot = plot_5_methods(dat = sigma_data) +
     geom_hline(yintercept = sigma,linetype = 3) +
     scale_y_continuous(limits = str1[7:8]) + 
     xlab(expression(sigma)) + 
     scale_fill_manual(values = col1[1:3])  
   return(plot_grid(b_plot,c_plot,d_plot,sigma_plot,ncol = 4,nrow = 1))
 }

Примечание: здесь я помещаюylimположить все этоstr1В параметрах удобно для ручной модификации.all_data_0.3Представляет набор данных, полученный скриптом. Добавлено несколько во времяggplotПараметры, измененные цвета и добавленные заголовки по оси X и т. д. (см. личные настройки для добавления).

all_plot_compare函数结果

  • Загрузите Rdata и постройте график

Первые две функции могут в основном рисовать всю графику набора данных, а затем я хочу загрузить разные наборы данных (например:load("~/Desktop/2021.06.06/data/latex/plot_data/R11_500_200_0.3.Rdata")), затем набор данных внутреннего ключа (point_final), чтобы переопределить и отрисовать ранее написанную функцию и сохранить ее в переменной (p_0.3).

 # sigma0.3
 load("~/Desktop/2021.06.06/data/latex/plot_data/R11_500_200_0.3.Rdata")
 all_data_0.3 = point_final
 dim1 = nrow(all_data_0.3) 
 p_0.3 = all_plot_compare(data1 = all_data_0.3)

последнее использованиеggpubrв упаковкеannotate_figure()Добавьте тег к изображению, затем используйтеcowplotв упаковкеplot_grid()Объединить картинки. Конкретная ссылка на учебник:Статистика и графика языка R: добавьте маленькие метки ABCD к комбинированной графике;R Visual View | Объединение нескольких графиков;Язык R ggplot2 рисует красивое сопоставление цветов;пакет палитр: более 2100 палитр!

код показывает, как показано ниже:

 fig11 = annotate_figure(p_0.3,
                         top = text_grob(bquote("("*sigma==0.3*")"),
                                         color = "black", size = 12))
 fig21 = annotate_figure(p_0.5,
                         top = text_grob(bquote("("*sigma==0.5*")"),
                                         color = "black", size = 12))
 fig31 = annotate_figure(p_0.8,
                         top = text_grob(bquote("("*sigma==0.8*")"),
                                         color = "black", size = 12))
 plot_grid(fig11,fig21,fig31,ncol = 1,nrow = 3)

Уведомление:Вот еще одна хитрость: добавьте на этикетку специальные символы, вы можете использоватьexpression()функцию, вы также можете использовать то, что я написал здесьbquote()функция.

绘图代码缩略图

мне есть что сказать

Вот некоторые уточнения:

  • может быть напрямуюviridisпакет для заливки цветом, например:scale_fill_viridis(discrete = TRUE, alpha=0.6). Я использую ручную загрузку цветов здесь:scale_fill_manual(values = col1).
  • Если изображение содержит китайский язык, вы можете использоватьshowtextПакет решает проблему, код такой:
 library(showtext)
 showtext.auto()
  • Есть еще одна идея для всего процесса: собрать все функции в одну большую функцию, нужно только изменить соответствующие параметры, тогда количество кода сильно уменьшится.
  • Надеюсь, что после прочтения этого твита через пол года у меня будет другое представление. Я надеюсь, что нынешнее мышление к тому времени будет очень наивным! ?

рекомендовать:Вы можете сохранить следующие фотографии, отсканировать QR-код на станции b или выполнить поиск [庄闪闪] Посмотрите серию видеоуроков по Rmarkdown. Видео Rmarkdown добавляет два новых видео (Слайд-шоу глаз пишущего колеса) Если вам нужны документы в видео, вы можете ответить на официальном аккаунте [rmarkdown

Общение R | Учебное пособие по Rmarkdown (4)

Общение с R | Учебное пособие по Rmarkdown (3)

Общение с R | Учебное пособие по Rmarkdown (2)

Связь R | Учебник по Rmarkdown (1)