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

How can I put italics to my genes? #38

Open BenjaDuran opened 4 years ago

BenjaDuran commented 4 years ago

I have tried a lot of stuff, the code keeps crashing

veghp commented 4 years ago

There is no such functionality, but you can install DNA Features Viewer in editable form. After downloading, go to the folder and install with: pip install -e .

then you can edit the plotting function locally: add a parameter in the text definition after line 256 in MatplotlibPlottableMixin.py. The section now looks like this:

        text = ax.text(
            x,
            y,
            label,
            horizontalalignment="center",
            verticalalignment="center",
            bbox=bbox,
            fontdict=fontdict,
            zorder=2,
            style='italic',  # added line
        )

index

veghp commented 4 years ago

Alternatively, you can set or change plotting parameters:

import matplotlib.pyplot as plt
plt.rcParams["font.style"] = "italic"
veghp commented 4 years ago

Finally, you can also save the plot in a vector graphics format (svg) and use an image editor (Inkscape) to change the text.

Zulko commented 4 years ago

The font.style='italic' is part of the fontdict, which you can customize separately for each feature in DNA Features Viewer. I don't know the use case here but something like this should work:

from dna_features_viewer import BiopythonTranslator

class MyCustomTranslator(BiopythonTranslator):
    def compute_feature_fontdict(self, feature):
        return {'style': 'italic'} if (feature.type == "CDS") else {}

graphic_record = MyCustomTranslator().translate_record("example_sequence.gb")
ax, _ = graphic_record.plot(figure_width=10)

If you want only part of your label to be italic, then it may be more complicated but you could try Matplotlib's Latex rendering feature