R ggplot:循环数据帧源

问题描述 投票:0回答:1

我想在一个单独的图中绘制对应于100个数据系列的100个图。更确切地说,我有一个包含100个元素的列表(名称:ROC.df),其中每个元素都是一个数据框(名称:df),包括两列PODPOFD。我想在一个单独的图中以不同的颜色绘制所有100个图。我试图在循环中改变ggplot中的data参数:

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函数合并所有数据。我试过但我没有实现。预先感谢您的帮助。

r ggplot2 melt
1个回答
1
投票

您可以行绑定列表中的所有data.frames,并使用col参数应用不同的颜色,而不是使用100个图层。这是一个列表中包含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"))
© www.soinside.com 2019 - 2024. All rights reserved.