【问题标题】:for loop plot in list of data frame数据框列表中的for循环图
【发布时间】:2018-09-10 01:55:37
【问题描述】:

我想制作多个情节。

所以我拆分数据框,并尝试 ggplot。

linkid <- unique (orgin_dat$stdLinkId)
temp <- split(orgin_dat, orgin_dat$stdLinkId)

p1 <-  ggplot(temp$`1550007100`, aes(x=datetime, y=linkSpeed)) +
  geom_line() +
  ggtitle(linkid[i])
## it works

p1 <-  ggplot(temp$linkid[1], aes(x=datetime, y=linkSpeed)) +
  geom_line() +
  ggtitle(linkid[i])
## it doesn't work

我的目标是

for(i in 1:50){
  assign(paste(p, i, sep=""), 
  ggplot(temp$linkid[i], aes(x=datetime, y=linkSpeed)) +
    geom_line() +
    ggtitle(linkid[i]))
}
## it doesn't work

谢谢。

【问题讨论】:

  • temp$linkid[1] 会产生您期望它产生的结果吗?你可能想要temp[linkid[1]] 之类的东西,尽管如果不知道templinkid 的样子,就很难解决确切的问题。
  • 您似乎正在尝试将$[ 组合起来以对列表进行子集化?尝试temp[[i]] 而不是temp$linkid[i]。我建议使用list 来存储绘图,而不是使用assign。如果您发布一个可重现的示例,我可以尝试提供更多帮助(也许使用 mtcars 内置数据?)。

标签: r dataframe ggplot2 split


【解决方案1】:

如果没有可重复的例子,很难得出明确的答案。但是,您可以尝试以下不需要拆分数据的解决方案:

for (i in unique(orgin_dat$stdLinkId)){
  assign(paste0("p", i),
  ggplot(filter(orgin_dat, stdLinkId == i),
         aes(x=datetime, y=linkSpeed)) +
  geom_line() +
  ggtitle(paste0(i))
}

注意:filter() 需要 library(dplyr)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-15
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 2022-01-20
    • 2014-03-31
    相关资源
    最近更新 更多