Как создать цикл For с помощью spplot в R?

У меня есть пространственный фрейм данных с местами выборки и множеством переменных. Я хотел бы создать пространственный график для каждой переменной в цикле For. Я использовал для этого spplot, который работает для одной переменной, когда я удаляю цикл. Ниже у меня есть краткое описание базы данных и цикла, который я сделал до сих пор. Как я могу построить цикл For, чтобы он создавал отдельные графики для каждой переменной?

class       : SpatialPointsDataFrame 
features    : 47 
extent      : -96.57795, -96.56407, 39.10135, 39.10672  (xmin, xmax, ymin, ymax)
coord. ref. : +init=epsg:4269 +proj=longlat +datum=NAD83 +no_defs +ellps=GRS80 +towgs84=0,0,0 
variables   : 18
names       :    Sample_id,         x,        y, bulk_density, Percentage_SOM, Clay, Silt, Very_fine_sand, fine_sand, medium_sand, stone,      Composite_depth, percentage_water, percentage_roots, Percentage_SOM_20cm, ... 
min values  : KLTER/K20A-1, -96.56407, 39.10135,        550.7,            6.9,  3.9, 66.9,            7.4,       0.0,         0.0,   0.1,             7.3,             16.8,             0.10,              4.2315, ... 
max values  : KLTER/K20A-9, -96.57795, 39.10672,       1031.8,           15.1,  8.5, 85.8,           18.5,       9.0,         5.2,  13.7,            20.0,             30.2,             2.16,             11.2000, ... 

df <- K20A_sp3
for(i in names(df))
{ 
  if(is.numeric(df[3,i])) 
    {
    spplot(df, names(zcol= i),
       scales=list(draw=T),
       cex = 1.4, 
       main="Watershed K20A",
       col.regions=brewer.pal(6, "Oranges"))
       dev.off()
     } 
  } 

Цикл с созданием файла .png

 for(i in names(df))
     { 
      if(is.numeric(df[3,i])) 
{
  dev.new()
  mypath  <- file.path("C:", "Users", "Ilona", "Documents", "A master thesis", "7.Rstudio", paste("Point_K20A_", i, ".png", sep=""))
  png(file=mypath)
  print(spplot(df, names(zcol= i),
         scales=list(draw=T),
         cex = 1.4, 
         main= paste("Watershed K20A_", i, sep = ""),
         col.regions=brewer.pal(6, "Oranges")
         sp.layout(K20A_DEM))))
  dev.off()
} 

}


person Ilona van der Kroef    schedule 15.02.2017    source источник
comment
Где вы открываете графическое устройство? и см. Часто задаваемые вопросы по R 7.22   -  person rcs    schedule 15.02.2017
comment
Я пробовал несколько вещей; поэтому dev.off() все еще в моем коде. Я не знал точно, что он делает. Я также пробовал функцию печати, но я думаю, что использую ее неправильно или что-то в этом роде. Я использовал его как print(spplot()), как j= spplot(), print(j, i, /n) и print(j). Я до сих пор понятия не имею, как заставить его работать правильно.   -  person Ilona van der Kroef    schedule 16.02.2017
comment
dev.off() закрывает открытое графическое устройство (см., например, ?png или ?pdf). Вы получаете сообщение об ошибке, например: Error in dev.off() : cannot shut down device 1 (the null device)?   -  person rcs    schedule 16.02.2017
comment
Спасибо за ваш ответ. Я не получил никаких ошибок. Это тоже вроде работает, но я не получаю никаких сюжетов. Пробовал сделать из него .png, но те тоже не сделали.   -  person Ilona van der Kroef    schedule 16.02.2017
comment
Вы можете преобразовать свои данные в data.frame и построить их с помощью ggplot2. Чтобы преобразовать пространственные объекты в data.frame, вы можете использовать fortify. После этого можно построить график нескольких переменных с помощью фасетирования.   -  person Paul Hiemstra    schedule 16.02.2017
comment
@IlonavanderKroef: вам не нужно dev.new(), если вы хотите создать файл PNG   -  person rcs    schedule 16.02.2017


Ответы (1)


Вы, вероятно, уже нашли ответ на этот вопрос, но добавили ответ из эквивалентного вопрос.

Суть в том, что нужно «печатать» график в цикле:

for(i in 1:10) {
    png(...)
    print(spplot(...))
    dev.off()
}
person jp2011    schedule 19.01.2019