R ggplot: цикл по источнику фрейма данных - PullRequest
0 голосов
/ 24 марта 2019

Я хотел бы построить 100 графиков, соответствующих 100 рядам данных на одном графике.Точнее, у меня есть список (имя: ROC.df), содержащий 100 элементов, где каждый элемент представляет собой фрейм данных (имя: df), включая два столбца POD и POFD.Я хочу построить все 100 графиков на одном графике другим цветом.Я попытался изменить аргумент data в ggplot в цикле:

ggplot() +
    for (i in 1:100) {
      df <- ROC.df[[i]][["df"]]
      RGB <- c("R" = runif(1, 0.0, 1.0), "G" = runif(1, 0.0, 1.0), "B" = runif(1, 0.0, 1.0))
      geom_line(data = df, 
      mapping = aes(x = POFD, y = POD), color = rgb(RGB["R"], RGB["G"], RGB["B"]), alpha=0.5, size = 1) +
      geom_point(data = df, 
      mapping = aes(x = POFD, y = POD), color = rgb(RGB["R"], RGB["G"], RGB["B"]), alpha=0.5, size=4) 
    }
  + theme_bw() + theme(panel.border = element_blank(), panel.grid.major = element_blank(),
                       panel.grid.minor = element_blank(), axis.line = element_line(colour = "black"))

Код не работает.Вот как выглядит каждый df: (следующее содержимое соответствует ROC.df[[1]][["df"]]):

         POFD       POD
1  0.00000000 0.1666667
2  0.01449275 0.1666667
3  0.02898551 0.1666667
4  0.02898551 0.3333333
5  0.04347826 0.3333333
6  0.05797101 0.3333333
7  0.07246377 0.3333333
8  0.08695652 0.3333333
9  0.08695652 0.5000000
10 0.10144928 0.5000000
11 0.10144928 0.6666667
12 0.10144928 0.8333333
13 0.11594203 0.8333333
14 0.13043478 0.8333333
15 0.14492754 0.8333333
16 0.15942029 0.8333333
17 0.31884058 0.8333333
18 0.33333333 0.8333333
19 0.34782609 0.8333333
20 0.34782609 1.0000000
21 0.40579710 1.0000000
22 0.42028986 1.0000000
23 0.43478261 1.0000000
24 0.44927536 1.0000000
25 0.46376812 1.0000000

Я немного искал и обнаружил, что было рекомендовано объединить все данные, используя meltфункция из пакета reshape2.Я пытался, но я не достиг.Заранее благодарю за помощь.

1 Ответ

1 голос
/ 24 марта 2019

Вместо использования 100 слоев, вы можете связать строки со всеми data.frames в списке и использовать аргумент col для применения разных цветов.Вот пример с 10 случайными data.frames в списке:

library(dplyr)
library(ggplot2)

# Create list of data frames
list_of_dfs <- data.frame(POD = rep(1:10, 10) + rnorm(100), 
                          POFD = rep(5:14, 10) + rnorm(100),
                          group = factor(LETTERS[rep(1:10, each = 10)])) %>% 
  split(rep(1:10, each = 10))

# Bind data frames
df <- bind_rows(list_of_dfs)

# Create plot
ggplot(df) +
  geom_line(aes(x = POD, y = POFD, col = group)) + 
  theme_bw() + 
  theme(panel.border = element_blank(), panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(), axis.line = element_line(colour = "black"))
...