0

I am trying to visualize DNA sequences and their assembly. I have been able to produce the image assembly of DNA fragments

with the code below. This is very difficult since I need to experiment with the x coordinates to get the sequences with different colors close to each other. I was wondering if there is any proper way of doing this? Thanks in advance!

from revcomp import revcomp
import matplotlib.pyplot as plt

sequence = "ATGCGTGGACGTG"
complement = revcomp(sequence, reverse=False, complement=True)

seqlist_1 = ["5' ", sequence, " 3'"]
hydrobonds_1 = ["   ", len(sequence)*"|"]
complist_1 = ["3' ", complement, " 5'"]

# Digest sequence like a 5' exonuclease
digest_1 = ["".join(complist_1)[0:10], 7*" ", "5'"]

sequence = "GACGTGAGTGTGACGTGACCCGGTTTT"
complement = revcomp(sequence, reverse=False, complement=True)

seqlist = ["5' ", sequence, " 3'"]
hydrobonds = ["   ", len(sequence)*"|"]
complist = ["3' ", complement, " 5'"]

plt.plot()
plt.text(-0.04, 0.04, "".join(seqlist_1), color = "blue")
plt.text(-0.04, 0.035, "".join(complist_1)[0:10], color = "blue")
plt.text(-0.0235, 0.035, "".join(complist_1)[10:], color = "red")
plt.text(0.025, 0.04, "".join(seqlist)[9:], color = "green")
plt.text(0.01, 0.04, "".join(seqlist)[0:9], color = "red")
plt.text(0.01, 0.035, "".join(complist), color = "green")

plt.text(-0.04, 0.02, "".join(seqlist_1), color = "blue")
plt.text(-0.04, 0.015, "".join(complist_1)[0:10], color = "blue")
plt.text(0.025, 0.02, "".join(seqlist)[9:], color = "green")
plt.text(0.01, 0.015, "".join(complist), color = "green")

plt.text(-0.04, -0.01, "".join(seqlist_1)[:-2], color = "blue")
plt.text(-0.012, -0.01, "".join(seqlist)[9:], color = "green")
plt.text(-0.04, -0.015, "".join(complist_1)[0:10], color = "blue")
plt.text(-0.025, -0.015, "".join(complist)[2:], color = "green")

plt.text(0, 0.025, "5' exonuclease")
plt.text(0, 0, "Gibson assembly")

plt.axis('off')
plt.show()

The code uses the function below:

def revcomp(dna, reverse=True, complement=True):
        """ Takes a sequence of DNA and converts it to its
        compliment, if only compliment is intended
        set reverse to False """
        bases = 'ATGCatgcWSRYMKwsrymkHBVDhbvdNnTACGTACGWSYRKMWSYRKMDVBHDVBHNN'
        complement_dict = {} # build a dictionary that contains each base with its complement.
        for i in range(30):
                complement_dict[bases[i]] = bases[i+30]
        if reverse: # if reverse is True, default is true
                dna = reversed(dna)
                result_as_list = None # define an empty list
        if complement: # if complement is true, default is true
                result_as_list = [complement_dict[base] for base in dna]
        else:
                result_as_list = [base for base in dna]
        return ''.join(result_as_list)
Trenton McKinney
  • 56,955
  • 33
  • 144
  • 158
Homap
  • 2,142
  • 5
  • 24
  • 34
  • Have you check [this question](https://stackoverflow.com/questions/9169052/partial-coloring-of-text-in-matplotlib) and the LateX color functionality ? Is it of interest for you ? – thmslmr Jun 20 '23 at 19:13
  • It's unclear what you are looking for. Can you explain what you want to change? What is an example input and desired output? – jared Jun 21 '23 at 03:59

0 Answers0