2017-05-06 9 views
1

R 환경에 일련의 2D 데이터 프레임 파일을 읽고 내용을 플로팅하고 싶습니다.파일 이름을 기준으로 x 축에 동적으로 주석을 추가하는 방법

예제 파일 이름은 다음과 같습니다

MEF_85686672-85692745_orientation _ + _ overlap_2073_regulation_.txt

head(MEF_85686672-85692745_orientation_+_overlap_2073_regulation_.txt) 
    1  85686673   97.51475 
    2  85686674   98.51475 
    3  85686675   100.51475 
    4  85686676   44.51542 
    5  85686677   97.50000 

나는 이러한 파일의 목록을 만들어이 파일을 반복 할 수 있도록 :

MEF=ls()[grep(ls(), pattern='MEF')] 

그런 다음 파일 내용을 THER 위의

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") 
    } 
} 

'+'기호가있는 경우. 'overlap'과 'regulation'사이에서 발생하는 파일 이름의 번호가 취해지고이 번호 (행 번호까지 빼기)에서 x 축의 끝까지입니다.

그래서 나는 파일을 각 통해 플롯 기능을 사용하고 반복 할 때

for(i in seq(length(MEF))){ 
    tryCatch(plot_files(MEF,ESC), error=function(e) e) 
} 

첫 번째 문제는 아무것도 ... 내가 처음이 될 수 있다는 것을 의심 플롯의 강조 표시되지 않은 것입니다 전체 x 축의 컨텍스트에서 볼 수있는 영역에 대한 겹침이 작아서 발생합니다. 그러나 중복 중 일부는 매우 크고 아직 결과 플롯 'X 축 중 어느 것도 강조되지이다 : 그래서

enter image description here

내가 인공 번호 (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") 
} 

다음 플롯 결과 : enter image description here

그래서뿐만 아니라 x 좌표의 잘못된 끝에서 연장 하이라이트 축뿐만 아니라 전체 플롯을 다루지도 않습니다. 단지 x 축을 선으로 강조하고 싶습니다 ...끝에서 x 축을 강조

enter image description here

하나 :

내가 원하는 모든 플롯 X 축이 다음과 같이 하이라이트입니다 (참고 : 나는 색상과 나중에 밀도를 정렬합니다) x 축의 길이에서 빼는 변수 이름의 겹침에 해당하는 수로 축의 수를 나눕니다 (참고 : '+'가 아닌 '-'가있는 대체 사례에서 작업합니다. 강조 표시가 오른쪽이 아닌 축의 왼쪽에서 확장 됨)

+0

'할당'을 사용하지 마십시오. 리스트와'lapply()'를 대신 사용하십시오. – Uwe

답변

0
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(); 
} 

enter image description here