【问题标题】:How to do a Grid plot by condition - R如何按条件绘制网格图 - R
【发布时间】:2020-03-06 00:44:44
【问题描述】:

我有几个文件,共享相同和不同的特征。所以我根据列名做了一个循环来做直方图:

像这样(只是一部分):

for (i in 3:10) {
if (colnames(data)[i]=="ww_age") {
  a<-ggplot(data, aes(x=ww_age)) + 
    geom_histogram(color="black", fill="white")

}} 

for (i in 3:10) {
if (colnames(data)[i]=="ww_weight") {
  f<-ggplot(data, aes(x=ww_weight)) + 
    geom_histogram(color="black", fill="white")

}}

所以,我将为每个文件设置几种组合,例如,对于文件A,我将拥有a,b,c,d,e,f 图形,对于文件B,我将拥有a,c,d。所以,我想为每组图形做一个网格,像这样:

pdf("figura3.pdf",width=8,height=14,paper='special')
grid.newpage()
grid.draw(rbind(ggplotGrob(a), ggplotGrob(b),ggplotGrob(c), 
                ggplotGrob(d), ggplotGrob(e),ggplotGrob(f), 
size = "last"))
dev.off()

但是我该怎么做呢?对于 af 在情况 A 中使用 a,c,d 在情况 B 中。

【问题讨论】:

  • 你不需要迭代。您介意为文件 A 提供一个表格吗,您需要哪些列,对于文件 B,您需要什么等

标签: r loops ggplot2 graphics grid


【解决方案1】:

例如我们有两个文件,

df = data.frame(x=1,y=2,sapply(1:8,function(i)rnorm(100,i,1)))
colnames(df)[3:10] = paste0("column_",letters[1:8])
write.table(df,"fileA.txt",row.names=FALSE,quote=FALSE,sep="\t")

df = data.frame(x=1,y=2,sapply(1:8,function(i)rnorm(100,i,1)))
colnames(df)[3:10] = paste0("column_",LETTERS[1:8])
write.table(df,"fileB.txt",row.names=FALSE,quote=FALSE,sep="\t")

现在我们编写一个可以读取文件的函数,获取定义的列并制作组合图:

library(tidyr)
library(tibble)
library(ggplot2)

plotfun = function(datafile,colvars){
data = read.delim(datafile,stringsAsFactors=FALSE)
plotdf = pivot_longer(data[,colvars],everything())
p = ggplot(plotdf,aes(x=value))+
geom_histogram(color="black", fill="white") + facet_wrap(~name)
return(p)
}

我们在一个文件上对其进行测试,其中包含一些列:

plotfun("fileA.txt",c("column_a","column_b","column_e"))

现在我们需要定义一个列表,说明文件是什么,要绘制的列是什么以及将其保存为什么:

LIST = list(
A = list(file="fileA.txt",
colvars = c("column_a","column_b","column_c","column_d","column_e","column_f"),
pdf = "A.png"),
B = list(file="fileA.txt",colvars = c("column_a","column_c","column_d"),pdf="B.png")
)

现在我们遍历这个列表:

for(i in 1:length(LIST)){
p = plotfun(LIST[[i]]$file,LIST[[i]]$colvars)
ggsave(p,file=LIST[[i]]$pdf)
}

【讨论】:

  • The Iterate didn't work 出现此消息:for(i in 1:length(LIST)) {p = plotfun(LIST\[\[i\]\]$file,LIST\[\[i\]\]$colvars) Error: unexpected input in "for(i in 1:length(LIST)) {p = plotfun(LIST\" ggsave(p,file=LIST\[\[i\]\]$pdf)} Error: unexpected input in " ggsave(p,file=LIST\"
猜你喜欢
  • 2021-01-07
  • 2015-03-17
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-14
  • 2021-05-31
  • 2021-11-12
相关资源
最近更新 更多