Edinburgh-Genome-Foundry / DnaFeaturesViewer

:eye: Python library to plot DNA sequence features (e.g. from Genbank files)
https://edinburgh-genome-foundry.github.io/DnaFeaturesViewer/
MIT License
584 stars 90 forks source link

GFF plot doesnt work #34

Open ZarulHanifah opened 4 years ago

ZarulHanifah commented 4 years ago

Hello DnaFeaturesViewer developers,

I can't plot my gff (attached, had to change extension to txt ATCC_13124.gff.txt). There is supposed to be 2997 features, but only 1 record was produced from GFF.parse().

veghp commented 4 years ago

Thank you for your interest in DnaFeaturesViewer. I had a look at your GFF file and it indeed contains only one record (which is 3.2M bp long) with 2997 features.

What is your expected outcome? I made a smaller version of the file (containing the first 5 features) and it plots fine:

test

ZarulHanifah commented 4 years ago

Amazing! What is the code to plot that? It is much simpler with genbank files, but from the tutorial, it wasn't clear how to start from GFF.parse() to get to the plot.

Please show me the code, pleaseee.

Thank you.

veghp commented 4 years ago

If you have a small GFF file, you can run:

from dna_features_viewer import BiopythonTranslator
graphic_record = BiopythonTranslator().translate_record("yourfile.gff")
ax, _ = graphic_record.plot(figure_width=10, strand_in_label_threshold=7)

If you want to plot only a section of the record (from start to end):

from dna_features_viewer import BiopythonTranslator
from BCBio import GFF
in_file = "ATCC_13124.gff"

in_handle = open(in_file)
gff_records = []
for rec in GFF.parse(in_handle):
    print(rec)
    gff_records.append(rec)
in_handle.close()

start = 0
end = 5000
record = BiopythonTranslator().translate_record(gff_records[0][start:end])
ax, _ = record.plot(figure_width=10, strand_in_label_threshold=7)

Note that GFF.parse() is part of the BCBio package, not Dna Features Viewer.

ZarulHanifah commented 4 years ago
fig, ax = plt.subplots()

gff_path = "results/ALL_PROKKA/ATCC_13124/ATCC_13124.gff"

gff_records = []

with open(gff_path) as in_handle:
    for rec in GFF.parse(in_handle):
        gff_records.append(rec)

start, end = 0, 5000
record = BiopythonTranslator().translate_record(gff_records[0][start:end])
record.plot(ax= ax)

image

Beautiful! Thank you!!