R 如何基于文件名动态注释x轴
我已经将一系列2D数据帧文件读取到我的R环境中,并希望绘制它们的内容 示例文件名为: MEF_85686672-85692745_方向_+_重叠_2073_规则_uu.txt 为了能够遍历这些文件,我列出了这些文件的列表: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[,
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();
}