R ggplot:循环数据帧源
R ggplot : loop over data frame source
我想在一个图中绘制对应于 100 个数据系列的 100 个图表。更准确地说,我有一个包含 100 个元素的列表(名称:ROC.df
),其中每个元素都是一个数据框(名称:df
),包括两列 POD
和 POFD
.我想用不同颜色在一个图中绘制所有 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
我搜索了一下,发现建议使用 reshape2
包中的 melt
函数合并所有数据。我试过了,但没有成功。预先感谢您的帮助。
您可以行绑定列表中的所有 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"))
我想在一个图中绘制对应于 100 个数据系列的 100 个图表。更准确地说,我有一个包含 100 个元素的列表(名称:ROC.df
),其中每个元素都是一个数据框(名称:df
),包括两列 POD
和 POFD
.我想用不同颜色在一个图中绘制所有 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
我搜索了一下,发现建议使用 reshape2
包中的 melt
函数合并所有数据。我试过了,但没有成功。预先感谢您的帮助。
您可以行绑定列表中的所有 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"))