Сохранение нескольких графиков в R на основе разных наборов данных в одном PDF - PullRequest
0 голосов
/ 25 апреля 2018

Я действительно новичок и видел ответы на Stackoverflow для графиков в одном наборе данных, но не для графиков, основанных на нескольких наборах. У меня есть набор данных со 100 маленькими наборами данных (100 картин), и эти картины были оценены от 1-4 30 участниками. Таким образом, я получаю один сюжет на одну картину, и я бы хотел, чтобы все они были сохранены в одном файле PDF. Как я могу сделать это за один раз или нет вручную для каждого сюжета?

Набор данных выглядит следующим образом:

painting_no measurement participant
1           3           1
1           4           2
1           3           3
1           2           4
...         ...         ...

Сначала я создал небольшие наборы данных, например:

pai1   <- subset(SeaAWIDE, SeaAWIDE$painting_no =="1")
pai2   <- subset(SeaAWIDE, SeaAWIDE$painting_no =="2")
pai3   <- subset(SeaAWIDE, SeaAWIDE$painting_no =="3")
pai4   <- subset(SeaAWIDE, SeaAWIDE$painting_no =="4")

И только после создания небольших наборов данных я создал барплоты так:

barplot(table(pai1$measurement),   ylab='Frequency', ylim=c(0,30), main= 'Painting 1 ') 
barplot(table(pai2$measurement),   ylab='Frequency', ylim=c(0,30), main= 'Painting 2 ')
barplot(table(pai3$measurement),   ylab='Frequency', ylim=c(0,30), main= 'Painting 3 ')
barplot(table(pai4$measurement),   ylab='Frequency', ylim=c(0,30), main= 'Painting 4 ')

Это создает графики в окне r, которые я могу сохранить вручную и скопировать в один файл - но есть ли код, который автоматически сохраняет эти графики в одном файле? Он может либо сохранить эти уже созданные барплоты, либо переписать код как функцию, зацикливающуюся над числами рисования

1 Ответ

0 голосов
/ 25 апреля 2018

Функция pdf перенаправляет графический вывод в указанный файл.Вы используете dev.off, чтобы закрыть устройство и снова отправить вывод в окно R.Код выглядит следующим образом:

pdf("path\filename.pdf", height = 8, width = 8) # change height and width as needed for good results
barplot(table(pai1$measurement),   ylab='Frequency', ylim=c(0,30), main= 'Painting 1 ') 
barplot(table(pai2$measurement),   ylab='Frequency', ylim=c(0,30), main= 'Painting 2 ')
# ...
dev.off()

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

painting_data <- split(SeaAWIDE, SeaAWIDE$painting_no)

library(purrr) # walk function
pdf("path\filename.pdf", height = 8, width = 8)
walk(1:length(painting_data), function(i) {
   barplot(
     table(painting_data[[i]]$measurement),
     ylab='Frequency',
     ylim=c(0,30),
     main= paste('Painting',i)
   )
})
dev.off()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...