2015-04-02 12 views
5

Używam pakietu Phylo z Biopython do tworzenia drzew filogenetycznych.W python, jak mogę zmienić rozmiar czcionki węzłów liści podczas generowania drzew filogenetycznych za pomocą Bio.Phylo.draw()?

W przypadku dużych drzew muszę zmniejszyć rozmiar czcionki węzłów liści. Zasugerowano, aby zmienić matplotlib.pyplot.rcParams ['font.size'], ale to tylko pozwala mi zmieniać nazwy osi i tytuły, ponieważ Phylo definiuje własne rozmiary czcionek. Nie mogę zmienić kodu źródłowego Phylo, ponieważ używam go na Uniwersytecie. Definiowanie cyfr lub osi nie jest opcją, ponieważ Phylo.draw() tworzy własne.

Czy ktoś ma jakieś sugestie, jak rozwiązać problem, może rozciągając oś Y?

Dotychczas używałem następujący kod do wytworzenia drzewa:

import matplotlib 
import matplotlib.pyplot as plt 
from Bio import Phylo 
from cStringIO import StringIO 

def plot_tree(treedata, output_file): 

    handle = StringIO(treedata) # parse the newick string 
    tree = Phylo.read(handle, "newick") 
    matplotlib.rc('font', size=6) 
    Phylo.draw(tree) 
    plt.savefig(output_file) 

    return 

Plot

Odpowiedz

3

Phylo.draw() może przyjąć jako argument osi. Z dokumentacji danej metody w Biopython można przeczytać następujące

osie: matplotlib/pylab osie Jeśli ważne wystąpienie matplotlib.axes.Axes The phylogram wykreślono w tej osi. Domyślnie (Brak) tworzona jest nowa liczba.

Oznacza to, że można załadować własne osie o dowolnym rozmiarze. Na przykład:

import matplotlib 
import matplotlib.pyplot as plt 
from Bio import Phylo 
from cStringIO import StringIO 

def plot_tree(treedata, output_file): 
    handle = StringIO(treedata) # parse the newick string 
    tree = Phylo.read(handle, "newick") 
    matplotlib.rc('font', size=6) 
    # set the size of the figure 
    fig = plt.figure(figsize=(10, 20), dpi=100) 
    # alternatively 
    # fig.set_size_inches(10, 20) 
    axes = fig.add_subplot(1, 1, 1) 
    Phylo.draw(tree, axes=axes) 
    plt.savefig(output_file, dpi=100) 

    return 

Daj mi znać, jeśli to działa dla Ciebie. Fábio

+0

Doskonale, dziękuję bardzo, dokładnie to chciałem. Inną rzeczą, którą możesz także wiedzieć, jest to, jak rozszerzyć maksymalną liczbę znaków w węzłach liści. Jak widać, niektóre nazwy są skracane i uzupełniane "..." – madcap

+0

@madcap Tak jak w przypadku rozmiaru czcionki wypróbuj coś, co dotyczy szerokości linii (rcParams ["lines.linewidth"]). To może zadziałać. Jeśli nie, daj mi znać, że będę wyglądał dalej. Czy możesz jakoś przesłać mi swoje przykładowe drzewo, aby móc z nim grać? Fábio –

+0

Wypróbuj następującą część drzewa, w której pięć nazw węzłów liści jest zbyt długich i nie są wyświetlane w całości. – madcap

Powiązane problemy