用于为不同行子集创建单独输出的R ggplot2循环

用于为不同行子集创建单独输出的R ggplot2循环,r,for-loop,ggplot2,facet-wrap,R,For Loop,Ggplot2,Facet Wrap,与其绘制所有数据行,我只想绘制我真正感兴趣的行的子集(子集是在列表中预先定义的)。也许这可以通过循环完成 示例:我有一个包含两个时间点(例如下面)实验中所有基因的基因表达数据的行数据框 我可以通过过滤行/基因(见下文)手动绘制单个子集,但是我更喜欢一个循环或映射,一个接一个地绘制所有子集(这里是组织类型) 所需的输出为每个子集的1个PDF文件(即心脏、肾脏、肝脏、肠道各1个PDF文件),以及与组织类型相关的基因子集。 它也将是伟大的,有每个PDF标题对应的组织类型 heart_list <

与其绘制所有数据行,我只想绘制我真正感兴趣的行的子集(子集是在列表中预先定义的)。也许这可以通过循环完成

示例:我有一个包含两个时间点(例如下面)实验中所有基因的基因表达数据的行数据框

我可以通过过滤行/基因(见下文)手动绘制单个子集,但是我更喜欢一个循环或映射,一个接一个地绘制所有子集(这里是组织类型)

所需的输出为每个子集的1个PDF文件(即心脏、肾脏、肝脏、肠道各1个PDF文件),以及与组织类型相关的基因子集。

它也将是伟大的,有每个PDF标题对应的组织类型

heart_list <- as.vector(interesting_genes %>% filter(tissue == 'heart')%>% select('gene') %>% unlist())

pdf(file=paste('heart_genes.pdf'), width=10, height=7)
for (i in seq_len(n_pages)) {
  print(ggplot(gene_expression %>% filter(gene %in% heart_list ), aes(x=timepoint, y=expression, group=interaction(timepoint,gene ), fill = timepoint)) + # for grouping on multiple columns use "interaction" https://stackoverflow.com/questions/18598953/geom-line-connects-points-mapped-to-different-groups
          geom_boxplot() +
          geom_point(position=position_jitterdodge(),aes(group=interaction(timepoint, gene)))+
          scale_x_discrete(limits=c("1", "2")) +
          facet_wrap_paginate(~ gene, scales = "free", ncol = 2, nrow = 2, page = i)) # use "free" scales if you want y-axis free too.
}
heart\u list%过滤器(组织=='heart')%%>%select('gene')%%>%unlist())
pdf(文件=paste('heart_genes.pdf'),宽度=10,高度=7)
适用于(i在序号中(n页)){
打印(ggplot(基因表达式%>%过滤器(基因%在%心脏列表中),aes(x=时间点,y=表达式,组=交互(时间点,基因),填充=时间点))+#对于在多个列上分组,使用“交互”https://stackoverflow.com/questions/18598953/geom-line-connects-points-mapped-to-different-groups
geom_箱线图()+
几何点(位置=位置抖动(),aes(组=交互(时间点,基因)))+
比例x离散(限值=c(“1”、“2”))+
刻面_-wrap_-paginate(~gene,scales=“free”,ncol=2,nrow=2,page=i))#如果希望y轴也自由,请使用“free”刻度。
}
任何帮助都将不胜感激。如果任何人有比facet_wrap_paginate更好的建议(例如cowplot或类似),也请让我知道。 提前谢谢

n_pages = 3

pdf(file=paste('all_genes.pdf'), width=10, height=7)

for (i in seq_len(n_pages)) {
      print(ggplot(gene_expression, aes(x=timepoint, y=expression, group=interaction(timepoint,gene ), fill = timepoint)) + # for grouping on multiple columns use "interaction" https://stackoverflow.com/questions/18598953/geom-line-connects-points-mapped-to-different-groups
              geom_boxplot() +
              geom_point(position=position_jitterdodge(),aes(group=interaction(timepoint, gene)))+
              scale_x_discrete(limits=c("1", "2")) +
              facet_wrap_paginate(~ gene, scales = "free", ncol = 2, nrow = 2, page = i)) # use "free" scales if you want y-axis free too.
    }
    
dev.off()
heart_list <- as.vector(interesting_genes %>% filter(tissue == 'heart')%>% select('gene') %>% unlist())

pdf(file=paste('heart_genes.pdf'), width=10, height=7)
for (i in seq_len(n_pages)) {
  print(ggplot(gene_expression %>% filter(gene %in% heart_list ), aes(x=timepoint, y=expression, group=interaction(timepoint,gene ), fill = timepoint)) + # for grouping on multiple columns use "interaction" https://stackoverflow.com/questions/18598953/geom-line-connects-points-mapped-to-different-groups
          geom_boxplot() +
          geom_point(position=position_jitterdodge(),aes(group=interaction(timepoint, gene)))+
          scale_x_discrete(limits=c("1", "2")) +
          facet_wrap_paginate(~ gene, scales = "free", ncol = 2, nrow = 2, page = i)) # use "free" scales if you want y-axis free too.
}