R: Создать список графиков с циклом for - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь создать список графиков своих данных, используя цикл для фильтрации (= "TAB_tmp2") и добавить новый график в список (= "ListeGRAPH").Я думаю, что проблема связана с разницей в таблице данных фильтра (= "TAB_tmp2").
Я прочитал несколько тем в Интернете об этом, но я не могу найти решение, которое могло бы работать в этом случае.

Мой код:

rm(list=ls()) # delete objects

#====================================
# Create data for the example 
#====================================  
TAB = data.frame(Types_Mesures = c(rep(1,3),rep(2,5),rep(3,10)))
TAB$ID_mesuresParType=NA
TAB$Mesures=log(c(1:length(TAB$Types_Mesures)))
Nb_Types=length(unique(TAB$Types_Mesures)) # in the real data, the number of "Types_Mesures" can change

for (x in 1:Nb_Types) {
  TAB_tmp=TAB[TAB$Types_Mesures==x,2]
  TAB[TAB$Types_Mesures==x,2]=c(1:length(TAB_tmp)) 
}

#====================================
# List of plots
#====================================
library(gridExtra)
library(ggplot2)

INPUTDirectory= "D:/TEST/"
setwd(dir=INPUTDirectory)

ListeGRAPH <- list()

for (x in 1:Nb_Types) {

  TAB_tmp2=TAB[TAB$Types_Mesures==x,]

  ListeGRAPH[[x]] <- ggplot(data = TAB_tmp2) + 
    geom_line(aes(x = TAB_tmp2$ID_mesuresParType, y = TAB_tmp2$Mesures))

  #   #Save graph
  #   png(filename = paste("TAB_plot_T",x,".png", sep = ""))
  #   print(ListeGRAPH[[x]]) 
  #   graphics.off()

}

gridExtra::grid.arrange(grobs = ListeGRAPH)

Когда я запускаю код, у меня появляется эта ошибка:

Ошибка: эстетика должна быть либо длины 1, либо такой же, какданные (3): x, y

Кажется, что grid.arrange не принимает графики разных размеров?Как я могу сделать список графиков с такого рода таблицей?В моих реальных данных число «Types_Mesures» может измениться.Более того, я думаю, что цикл for не позволяет использовать временную переменную (= "TAB_tmp2") для создания списка графиков, но этот код работает, когда я сохраняю свой график в файлах PNG.

Большое спасибо за помощь!

1 Ответ

0 голосов
/ 05 декабря 2018

Проблема на самом деле не в grid.arrange.Когда вы создаете графики с ggplot, вам не нужно использовать $ для индексации столбцов.Поэтому вместо:

ListeGRAPH[[x]] <- ggplot(data = TAB_tmp2) + 
  geom_line(aes(x = TAB_tmp2$ID_mesuresParType, y = TAB_tmp2$Mesures))

вы должны использовать:

ListeGRAPH[[x]] <- ggplot(data = TAB_tmp2) + 
  geom_line(aes(x = ID_mesuresParType, y = Mesures))

, и тогда вы сможете отобразить результаты, используя grid.arrange.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...