2017-11-18 185 views
0

我目前正在編寫「正在做」的程序,並繪製DNA樣本的相位分析,並且出現了一些問題:Output plot HERE!右側的圖像來自MATLAB並且是它應該如何看起來的例子。左邊的圖像是從我的程序輸出的。正如你所看到的藍色圖形看起來是正確的,但它是在不同的角度。我檢查過代碼,它和我的程序的MATLAB版本基本相同。無論如何,我會把它放在這裏,也許有一個我不知道的錯誤。但如果不是這樣,是否有一種「轉向/降低」的方式將圖形展示到正確的位置?如何在python中以某個角度「降低」圖形

Python代碼在這裏:

def listIni(size, const=0): 
    return [const] * size 

seq = SeqIO.read("C:/ec.fasta", "fasta") 
seqString = seq.format("fasta") 
seq = seqString[72:] 
seqLen = len(seq) 

phase = listIni(seqLen) 
A = complex(1, 1) 
T = complex(1, -1) 
C = complex(-1, -1) 
G = complex(-1, 1) 

RNL = range(0, seqLen) 
ntLoc = np.asarray(RNL) 


for i in RNL: 
    if seq[i] == "A": 
     phase[i] = np.angle(A) 
    elif seq[i] == "T": 
     phase[i] = np.angle(T) 
    elif seq[i] == "C": 
     phase[i] = np.angle(C) 
    else: 
     phase[i] = np.angle(G) 

arrPh = np.asarray(phase) 
unwrapedPh = np.unwrap(arrPh) 
cumulatedPh = np.cumsum(arrPh) 


plt.plot(ntLoc, unwrapedPh, label='uPhase', color='red') 
plt.plot(ntLoc, cumulatedPh, label='cPhase', color='blue') 
plt.xlabel("Relative nt location") 
plt.ylabel("Angle") 
plt.show() 

回答

0

我只是想通了。除了使用「手動加載順序」正如我在這部分代碼做的:

seq = SeqIO.read("C:/ec.fasta", "fasta") 
seqString = seq.format("fasta") 
seq = seqString[72:] 
seqLen = len(seq) 

我只是用內置的「功能」在Biopython是這樣的:

record = SeqIO.read("C:/ec.fasta", "fasta") 
sequence = record.seq 

和一切工作,因爲它應該。爲什麼它仍然是個謎。 無論如何感謝您的另一個想法和答覆alexblae!

0

我認爲問題出在np.angle定義。

在你的代碼中,我們有

angle('A') -> pi/4 
angle('T') -> -pi/4 
angle('G') -> 3pi/4 
angle('C') -> -3pi/4 

如此明顯的累積和將減少爲負角度。我想您更希望下面的映射:

angle('A') -> pi/4 
angle('T') -> 7pi/4 
angle('G') -> 3pi/4 
angle('C') -> 5pi/4 

一個quick'n'dirty外觀圖釋是

for i in RNL: 
    if seq[i] == "A": 
     phase[i] = np.angle(A) 
    elif seq[i] == "T": 
     phase[i] = np.pi-np.angle(T) 
    elif seq[i] == "C": 
     phase[i] = np.pi-np.angle(C) 
    else: 
     phase[i] = np.angle(G) 

但是這真的取決於你想對應的基地要指出的載體。