![](/img/trans.png)
[英]Using for loop on multiple columns to create title in r ggplot graphs
[英]Create graphs by group using ggplot in R
我对在 R 中使用ggplot2
比较陌生,并且已经为此苦苦挣扎了一段时间。 我已经弄清楚如何从图表上的一个数据框中获取所有内容(这很容易......),以及如何编写循环 function 以将每个观察结果(下面示例中的id
)放到他们自己的图表上,但不是如何为每个group
创建具有多个id
的单独图表,当我每次运行代码时id
和group
都可以更改时。 这是一些示例数据和我正在尝试制作的 output。
x <- c(1,3,6,12,24,48,72,1,3,6,12,24,48,72,1,3,6,12,24,48,72,1,3,6,12,24,48,72)
y <- c(8,27,67,193,271,294,300,10,30,70,195,280,300,310,5,25,60,185,250,275,300,15,40,80,225,275,325,330)
group <- c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2)
id <- c(100,100,100,100,100,100,100,101,101,101,101,101,101,101,102,102,102,102,102,102,102,103,103,103,103,103,103,103)
df <- data.frame(x,y,group,id)
在这里和这里都提出了类似的问题,但我仍然无法弄清楚如何做我需要的事情,因为我需要在同一个图表上按group
使用多个id
的单独图表(而不是方面)。
编辑以添加尝试 -
l <- unique(df$group)
for(l in df$group){
print(ggplot(df, aes(x = x, y = y, group = group, color = id))+
geom_line())
}
使用facet_grid()
或facet_wrap()
library(ggplot2)
ggplot(df, aes(x= x, y=y, colour= factor(id))) + geom_line() + facet_grid(group ~ .)
编辑:OP在评论中澄清他们想要单独的图表,而不是刻面
# 1
ggplot2(df[df$group == 1,], aes(x= x, y=y, colour= factor(id))) + geom_line()
# 2
ggplot2(df[df$group == 2,], aes(x= x, y=y, colour= factor(id))) + geom_line()
为了达到你想要的结果
split
按group
拆分您的 dataframelapply
循环拆分数据框列表以创建绘图,或者如果要将组标签添加到标题,则可以循环遍历names(df_split)
。 注意:我将id
变量转换为因子。 此外,您必须在组美学上使用 map id
才能获得每组的行数。 但是,由于您的 x 变量是数字,因此实际上不需要group
美学。
library(ggplot2)
df_split <- split(df, df$group)
lapply(df_split, function(df) {
ggplot(df, aes(x = x, y = y, group = id, color = factor(id))) +
geom_line()
})
lapply(names(df_split), function(i) {
ggplot(df_split[[i]], aes(x = x, y = y, group = id, color = factor(id))) +
geom_line() +
labs(title = paste("group =", i))
})
#> [[1]]
#>
#> [[2]]
即使我建议使用lapply
,也可以使用for
循环来实现,如下所示:
for (i in names(df_split)) {
print(
ggplot(df_split[[i]], aes(x = x, y = y, group = id, color = factor(id))) +
geom_line() +
labs(title = paste("group =", i))
)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.