Как сделать динамический c график с набором данных каждой итерации в R - PullRequest
0 голосов
/ 20 января 2020

У меня уже есть наборы данных каждой итерации, df1, df2, df3 ..., (те же номера столбцов, разные номера строк), я хочу создать динамический c график, чтобы показать прогресс моей go , но я не знаю, как отобразить df1, df2 в a для l oop. Вот мой код:

cols <- c("1" = "red", "0" = "blue")
saveGIF({
for (i in 1:5){  
a=ggplot(df&i, 
aes(x=x1,  y=x2, colour =type))  +   
geom_point(alpha = 1,shape=21, size =3)+ 
scale_colour_manual(values = cols)+
xlim(-20,10)+ylim(-10,20)
print(a)}
}, interval = .2, movie.name="test.gif")

Или, если у вас есть предложения по использованию других методов для создания динамического c сюжета, пожалуйста, дайте мне знать, спасибо. df1 (100 * 3) - это кадр данных после первой итерации, df2 (85 * 3) - это кадр данных после второй итерации, я хочу создать анимированный GIF.

> head(dataframe2)
        x1       x2 type
1 1.585476 4.792934    1
2 1.645032 5.435548    1
3 1.150726 6.064459    1
4 1.168859 5.889715    1
5 1.830974 5.088805    1
6 1.326834 5.162828    1

тип - это коэффициент, 0 или 1, для разных цветов. спасибо.

1 Ответ

0 голосов
/ 20 января 2020

Есть два способа заставить ваш код работать.

  1. Если у вас есть data.frames с именами df1, df2, et c, поместите их в список с mget/ls.
  2. В l oop см. Data.frames, индексирующий список, созданный в пункте 1.

Что-то вроде следующего.

library(animation)
library(ggplot2)

df_list <- mget(ls(pattern = "^df\\d+"))

cols <- c("1" = "red", "0" = "blue")
saveGIF({
  for(i in seq_along(df_list)){
    a <- ggplot(df_list[[i]], 
                aes(x = x1,  y = x2, colour = type))  +   
      geom_point(alpha = 1,shape = 21, size = 3)+ 
      scale_colour_manual(values = cols) +
      xlim(-20, 10) + ylim(-10, 20)
    print(a)
  }
}, interval = .2, movie.name="test.gif")

enter image description here

Проверка кода создания данных.

df1 <- data.frame(x1 = -20:10, x2 = sin(-20:10), type = factor(0))
tmp <- lapply(1:4, function(m) {
  data.frame(x1 = df1$x1, x2 = df1$x2*m, type = factor(m %% 2))
})
names(tmp) <- paste0("df", 2:5)
list2env(tmp, envir = .GlobalEnv)
...