Введение
Недавно я провожу бумажный эксперимент по моделированию и визуализирую результаты эксперимента. Ниже приводится краткое изложение моего опыта на этом этапе. Я записываю его здесь и надеюсь, что он может вам помочь.
Метод не обязательно лучший, и критика приветствуется. Так как работа еще продолжается, полный код на данном этапе раскрываться не будет.Некоторые коды и идеи написания кода приведены ниже.
весь рабочий процесс: Из-за разных параметров будут получены разные результаты. Моя цель — наконец визуализировать результаты симуляции с разными параметрами через график.
трудность: Каждый скрипт имеет большой объем кода и длительное время симуляции (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
Функция: использоватьggplot2
package отображает столбец параметров в наборе данных (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 и т. д. (см. личные настройки для добавления).
- Загрузите 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)