2013-08-20 3 views
1

Я хочу создать несколько графиков решетки в цикле for, но он создает пустые образы !!!Решетчатые участки в цикле - создаются пустые образы

for (f in unique(df$month)) { 
    plot.new() 
    bwplot(x ~ country|type, data = df[df$month == f,], panel=function(...) { 
     panel.abline(h=0, col="green") 
     panel.bwplot(...) 
    }) 
    savePlot(paste0("file_", f), "png") 
} 

Когда я запускаю внутреннюю часть цикла цикла «вручную», он работает, но в цикле он перестает работать. Зачем?

Вот код для генерации данных:

set.seed(123) 
n <- 300 
country <- sample(c("Europe", "Africa", "Asia", "Australia"), n, replace = TRUE) 
type <- sample(c("city", "river", "village"), n, replace = TRUE) 
month <- sample(c("may", "june", "july"), n, replace = TRUE) 
x <- rnorm(n) 
df <- data.frame(x, country, type, month) 

ответ

4

Первая часть является FAQ (в R Docs, и на SO): вы должны напечатать (mylatticeplot), когда не интерактивна.

Кроме того, ваш подход, например, не работает в RStudio.

Error in savePlot(paste0("file_", f), "png") : 
    can only copy from 'windows' devices 

Рекомендуемый способ работает лучше, и меньше работы:

png("file_%03d.png") 
for (f in unique(df$month)) { 
    p = bwplot(x ~ country|type, data = df[df$month == f,], panel=function(...) { 
    panel.abline(h=0, col="green") 
    panel.bwplot(...) 
    }) 
    print(p) 
} 
dev.off() 
+0

Aaaaaargh! Как противопоказано R! Спасибо, я видел этот подход, но я его ненавижу, в отличие от 'savePlot', он не покажет мне сюжеты в одно и то же время. – TMS

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