代码之家  ›  专栏  ›  技术社区  ›  Filip Najbr

在python中,如何从某个角度“降低”图形

  •  0
  • Filip Najbr  · 技术社区  · 7 年前

    我目前正在编写一个程序,该程序正在“做”和绘制DNA样本的相位分析,但有点问题: Output plot HERE! 右边的图片来自MATLAB,是它应该是什么样子的示例。左边的图像是我的程序输出的。正如你所看到的,蓝色的图形看起来是正确的,但它处于不同的角度。我已经检查了代码,它与我的程序的MATLAB版本基本相同。无论如何,我会把它放在这里,也许有个错误我不知道。但如果不是,有没有办法将图形“旋转/降低”到正确的位置?

    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()
    
    2 回复  |  直到 7 年前
        1
  •  0
  •   alexblae    7 年前

    我认为问题在于 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
    

    一次快速的肮脏的巡查

    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)
    

    但这实际上取决于你想要去哪里,向量对应于基想要指向的地方。

        2
  •  0
  •   Filip Najbr    7 年前

    我刚想出来。而不是像我在这部分代码中所做的那样使用“手动序列加载”:

    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!