R 如何基于文件名动态注释x轴

R 如何基于文件名动态注释x轴,r,plot,axis,highlight,R,Plot,Axis,Highlight,我已经将一系列2D数据帧文件读取到我的R环境中,并希望绘制它们的内容 示例文件名为: MEF_85686672-85692745_方向_+_重叠_2073_规则_uu.txt 为了能够遍历这些文件,我列出了这些文件的列表: MEF=ls()[grep(ls(), pattern='MEF')] 然后我一个接一个地绘制文件的内容 plot_files=function(MEF){ mef=get(MEF[i]) tryCatch( plot(mef[,

我已经将一系列2D数据帧文件读取到我的R环境中,并希望绘制它们的内容

示例文件名为:

MEF_85686672-85692745_方向_+_重叠_2073_规则_uu.txt

为了能够遍历这些文件,我列出了这些文件的列表:

MEF=ls()[grep(ls(), pattern='MEF')]
然后我一个接一个地绘制文件的内容

    plot_files=function(MEF){
      mef=get(MEF[i])
      tryCatch(
      plot(mef[,1], (mef[,2]/mean(mef[1:1000,2])), 
      main = gsub('.txt','',gsub('MEF_nuc_occupancy_region','',paste(MEF[i]))), xlab="bp", 
      ylab="Occupancy", type='l', ylim=c(min(mi),max(ma)), col='red'),
      error=function() next);
所有这些都很好。当我尝试完成函数以根据文件变量的名称进一步注释绘图时,出现了问题。我想根据文件名中规则模式“方向”和“重叠”之间是否存在“+”符号来突出显示x轴

if(substr(paste(MEF[i]), regexpr(paste(MEF[i]), pattern='_orientation_')+13, regexpr(paste(MEF[i]), pattern='_overlap_')-1)=='+'){
   rect(xleft=85692000, xright=nrow(mef), ybottom=par("usr")[3], ytop=par("usr")[4], density=NA, col="lightgray")
   }
}
如果存在“+”符号。文件名中出现在“重叠”和“规则”之间的数字将被提取,并从该数字(从中减去行数)到x轴的末端

因此,当我使用这个plot函数并对每个文件进行迭代时:

for(i in seq(length(MEF))){
  tryCatch(plot_files(MEF,ESC), error=function(e) e)
}
第一个问题是,在任何绘图中都没有突出显示。。。我首先怀疑,这可能是由于在整个x轴的上下文中,区域上的重叠太小而不可见。但是,一些重叠相当大,但没有突出显示结果图的x轴:

因此,当我尝试使用一个人工数字(85692000)调试它并尝试将高亮显示扩展到轴的右端时,如下所示:

if(substr(paste(MEF[i]), regexpr(paste(MEF[i]), pattern='_orientation_')+13, regexpr(paste(MEF[i]), pattern='_overlap_')-1)=='+'){
rect(xleft=85692000, xright=nrow(mef), ybottom=par("usr")[3], ytop=par("usr")[4], density=NA, col="lightgray")
}
以下绘图结果:

因此,高光不仅从x轴的错误端延伸,而且也没有覆盖整个绘图-我只想用一条线高光x轴。。。(注:稍后我会整理颜色和密度)

我所需要的只是一个曲线图,它高亮显示x轴,如下所示:

从轴的末端突出显示x轴到变量名称中对应重叠的数字,从x轴的长度中减去(注:我将处理另一种情况,其中有一个“-”而不是“+”,稍后-在这种情况下,突出显示将从轴的左侧而不是右侧延伸)


不要使用
分配
。使用列表和
lappy()
代替。不要使用
assign
。使用列表和
lappy()
if(substr(paste(MEF[i]), regexpr(paste(MEF[i]), pattern='_orientation_')+13, regexpr(paste(MEF[i]), pattern='_overlap_')-1)=='+'){
rect(xleft=85692000, xright=nrow(mef), ybottom=par("usr")[3], ytop=par("usr")[4], density=NA, col="lightgray")
}
library(ggplot2)
for(i in seq(length(MEF))){
  x1=get(MEF[i])
  x2=get(ESC[i])
  #png(filename=paste('PNG/', MEF[i], '.png', sep=''));
  p=ggplot(data=x1, aes(V1,V2))
  xmin=x1[1,1]+(nrow(x1)-as.numeric(substr(paste(MEF[i]), regexpr(paste(MEF[i]), pattern='_overlap_')+9, regexpr(paste(MEF[i]), pattern='_regulation_')-1)))
  xmax=x1[nrow(x1),1]
  p=p+geom_line(aes(colour='black'))+geom_line(data=x2, aes(V1,V2, colour='red'))+scale_colour_manual(labels = c("MEF", "ESC"),values = c("black","red"))+theme_bw()+labs(x='bp', y='Occupancy')+geom_rect(aes(xmin=xmin, xmax=xmax, ymin=-10, ymax=0), color="blue",fill='blue', alpha=0.01, inherit.aes = FALSE)
  print(p)
  #dev.off();
}