2016-11-26 2 views
0

Мне интересно сделать матрицу точечного графика из двух последовательностей dna с k как оценка подобия идентичности, а t - как порог. Я изучаю python, и хотя я хорошо разбираюсь в данных, я борюсь со столами и точками. Я создал приведенный выше код для создания простой матрицы идентичности. Теперь мне нужно изменить его или создать новый.Как создать dotplot из двух последовательностей ДНК в python

См. this paper для получения необходимых определений.

+0

Я добавил код, который я использовал раньше, чтобы создать простую матрицу точек участка. Я хотел бы знать, могу ли я что-то изменить на нем, чтобы астериск присутствовал только на определенном пороге. – Ana

+0

Я только что добавил, но у меня проблемы с публикацией, поскольку вы можете видеть, что не все получают в виде кода. Я несколько раз пробовал. Спасибо за ваше терпение. – Ana

+0

. Скрипт .py Я работал так, надеюсь, копия и вставка должны повредить его. Этот сценарий создал сюжет, где asterisc показывает соответствующие аминокислоты. То, что я хотел бы сделать, это создать аналогичный код или аналогичный график seq1, seq2, k, t (как порог). Что-то похожее на слайд 4 в http://www.cs.unibo.it/~dilena/LabBII/LabBI-I.pdf. Надеюсь, я лучше объясню, что я хотел бы сделать. Большое спасибо за вашу помощь. – Ana

ответ

1

Вы должны отделить логику генерации матрицы от сравнительно легкой логики создания персонажа.

Сначала определим дельта-функции:

def delta(x,y): 
    return 0 if x == y else 1 

Теперь M[i,j]:

def M(seq1,seq2,i,j,k): 
    return sum(delta(x,y) for x,y in zip(seq1[i:i+k],seq2[j:j+k])) 

Сделать матрицу этого:

def makeMatrix(seq1,seq2,k): 
    n = len(seq1) 
    m = len(seq2) 
    return [[M(seq1,seq2,i,j,k) for j in xrange(m-k+1)] for i in xrange(n-k+1)] 

Участок матрицы. Вы можете экспериментировать с различными персонажами:

def plotMatrix(M,t, seq1, seq2, nonblank = unichr(0x25A0), blank = ' '): 
    print(' |' + seq2) 
    print('-'*(2 + len(seq2))) 
    for label,row in zip(seq1,M): 
     line = ''.join(nonblank if s < t else blank for s in row) 
     print(label + '|' + line) 

Функция обертка:

def dotplot(seq1,seq2,k = 1,t = 1): 
    M = makeMatrix(seq1,seq2,k) 
    plotMatrix(M, t, seq1,seq2) #experiment with character choice 

И потом:

#for testing purposes (drawn from paper): 

seqx = "ACCTGAGCTCACCTGAGTTA" 
seqy = "ACCTGAGCTCACCTGAGTTA" 
dotplot(seqx,seqy) 

Выход:

|ACCTGAGCTCACCTGAGTTA 
---------------------- 
A|■ ■ ■ ■ ■ 
C| ■■ ■ ■ ■■  
C| ■■ ■ ■ ■■  
T| ■ ■ ■ ■■ 
G| ■ ■  ■ ■ 
A|■ ■ ■ ■ ■ 
G| ■ ■  ■ ■ 
C| ■■ ■ ■ ■■  
T| ■ ■ ■ ■■ 
C| ■■ ■ ■ ■■  
A|■ ■ ■ ■ ■ 
C| ■■ ■ ■ ■■  
C| ■■ ■ ■ ■■  
T| ■ ■ ■ ■■ 
G| ■ ■  ■ ■ 
A|■ ■ ■ ■ ■ 
G| ■ ■  ■ ■ 
T| ■ ■ ■ ■■ 
T| ■ ■ ■ ■■ 
A|■ ■ ■ ■ ■ 

Какие матчи фигуру из (хотя ему не хватает ж и столбцов этикетки - которые можно добавить в при желании):

enter image description here

+0

Ничего себе! Я впечатлен тем, что проверю код и протестирую его, и изменю некоторый параметр, чтобы узнать, что произойдет. Кроме того, вы могли бы порекомендовать мне некоторое чтение на графиках темы в python, но не matlabplot. Большое вам спасибо. Я попытаюсь также включить заголовки. – Ana

+1

В книге «Программирование биоинформатики с использованием Python» от Mitchell Model есть глава о создании точек с использованием графической библиотеки Tkinter. Он находится в Python 3, но должен (с некоторыми изменениями) работать с Python 2. Что-то вроде matlabplot намного богаче, чем то, что вы можете сделать с сырым Tkinter, поэтому я не уверен, почему вы хотели бы этого избежать. Существует ряд книг с такими названиями, как «Визуализация данных в Python», которые могут помочь вам начать работу. –

+0

Привет, я пытаюсь понять, как вставлять заголовки, любая помощь там, пожалуйста? – Ana

Смежные вопросы