2016-01-05 2 views
3

Мне было интересно, может ли кто-нибудь помочь с кодом ниже. У меня огромный набор данных (более 1000 предметов), которые я пытаюсь визуализировать индивидуально.Автосохранение нескольких страниц графических участков

Мне посчастливилось найти код, написанный Тони Куксоном от R-bloggers, который я изменил для моего использования. Код работает нормально, но созданные pdf-файлы повреждены - по сути, они отказываются открывать. У меня такое чувство, что где-то есть ошибка, но я еще не понял, где. Любая помощь будет высоко оценена.

library(lattice) 

names = LETTERS[1:3] 

for(i in 1:3){ 

mypath <- file.path("myFilepath", "folder containing 'Plots' subfolder ", 
        "Plots",paste("myplot_", names[i], ".pdf", sep = "")) 

pdf(file=mypath) 
mytitle = paste("Theoph Plots", names[i]) 
xyplot(conc ~ Time | Subject, group = Subject, data = Theoph, type = "l", 
    layout = c(2, 2), main = mytitle) 
dev.off() 
} 

Для кода воспроизводимый, вам нужно заменить MyFilePath, папку, содержащую папка «земли» и «участки» с именами реальных папок, которые могут быть найдены на вашем компьютере. Для получения дополнительной информации см. Оригинал на R-bloggers. Я был бы очень рад прояснить все, что кажется двусмысленным.

Благодаря

Edit:

library(lattice) 

names = LETTERS[1:3] 

for(i in 1:3){ 

mypath <- file.path("myFilepath", "folder containing 'Plots' subfolder ", 
       "Plots",paste("myplot_", names[i], ".pdf", sep = "")) 

pdf(file=mypath) 
mytitle = paste("Theoph Plots", names[i]) 
print(xyplot(conc ~ Time | Subject, group = Subject, data = Theoph, type = "l", 
layout = c(2, 2), main = mytitle)) 
dev.off() 
} 

мне удалось найти временное решение (выше) с помощью функции печати. Тем не менее, в настоящее время я получаю все 12 предметов в одном и том же формате. То, что я действительно хочу, - это 4 объекта (матрица 2 на 2) в отдельных pdf-файлах, что составляет всего 3 pdf. Кто-нибудь знает, как это сделать?

+1

Вы используете функцию 'print'. Если вам нужен один PDF-файл для каждого объекта, удалите 'group = Subject' из вашего' xyplot' и замените аргумент данных: 'data = Theoph [Theoph $ Subject == i,]'. Что вы хотите на каждом из четырех сюжетов? – BenBarnes

+1

@BenBarnes, Спасибо за этот ответ. Я хочу, чтобы 4 сюжета на каждом сюжете/pdf составляли в общей сложности 3 pdf. На данный момент он дает мне все 12 предметов по одному и тому же pdf, но на разных страницах pdf. Я пробовал ваше предложение, но результат не совсем тот, что я после ура! –

ответ

1

Если вы хотите построить подмножество Subject s на каждой странице, вы должны подмножить свои данные для каждой итерации, а затем построить график.

Чтобы получить 4 предмета на каждой странице, вы можете использовать следующий индекс строителем в качестве основы для Подменю:

(i - 1) * 4 + 1:4 

Трюк с Theoph набора данных является то, что субъект «номера» фактически упорядоченный факторы. Таким образом, вам нужно преобразовать приведенное выше значение в коэффициент или в качестве ярлыка к символьному вектору.

for(i in 1:3){ 
    ## Changed mypath to make it reproducible 
    mypath <- file.path(tempdir(), paste("myplot_", names[i], ".pdf", sep = "")) 
    pdf(file=mypath) 

    mytitle = paste("Theoph Plots", names[i]) 

    myIndex <- as.character((i - 1) * 4 + 1:4) # index builder from above 

    print(xyplot(conc ~ Time | Subject, 
     data = Theoph[Theoph$Subject %in% myIndex, ], 
     type = "l", layout = c(2, 2), main = mytitle)) 
    dev.off() 
} 

Порядок предметов немного вязок, так как эта переменная является упорядоченным фактором, как уже упоминалось. Чтобы сохранить порядок, можно Подмножество на уровни этого фактора:

myIndex <- levels(Theoph$Subject)[(i - 1) * 4 + 1:4] 

Самый лучший способ для создания индекса будет зависеть от ваших фактических данных.

+0

Большое спасибо за то, что нашли время для публикации. Он работает как волшебство! Индексирование действительно умное, мне просто нужно адаптировать его к более чем 100 предметам. Еще раз спасибо! –

+0

Нужно ли мне что-либо менять в этом коде, если мои субъекты были скорее факторами, чем упорядоченными факторами? Я просто продолжаю получать отчет об ошибке, когда я пробовал его по своим данным: «Исправлено в limits.and.aspect (default.prepanel, prepanel = prepanel, has.xlim = has.xlim,: требуется хотя бы одна панель). хорошо работает на данных Theoph®, но не работает на моем. –

+0

Используете ли вы вторую версию 'myIndex' или первый? – BenBarnes

Смежные вопросы