繁体   English   中英

在 R 中使用 ggplot 按组创建图表

[英]Create graphs by group using ggplot in R

我对在 R 中使用ggplot2比较陌生,并且已经为此苦苦挣扎了一段时间。 我已经弄清楚如何从图表上的一个数据框中获取所有内容(这很容易......),以及如何编写循环 function 以将每个观察结果(下面示例中的id )放到他们自己的图表上,但不是如何为每个group创建具有多个id的单独图表,当我每次运行代码时idgroup都可以更改时。 这是一些示例数据和我正在尝试制作的 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()

为了达到你想要的结果

  1. 使用例如splitgroup拆分您的 dataframe
  2. 使用lapply循环拆分数据框列表以创建绘图,或者如果要将组标签添加到标题,则可以循环遍历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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM