2015-04-02 11 views
5

Ich verwende das Phylo-Paket von Biopython, um phylogenetische Bäume zu erstellen.In Python, wie kann ich die Schriftgröße von Blattknoten ändern, wenn phylogenetische Bäume mit Bio.Phylo.draw() erzeugt werden?

Für große Bäume muss ich die Schriftgröße der Blattknoten verringern. Es wurde vorgeschlagen, matplotlib.pyplot.rcParams ['font.size'] zu ändern, aber dies erlaubt mir nur, Achsennamen und Titel zu ändern, da Phylo seine eigenen Schriftgrößen definiert. Ich kann den Phylo-Quellcode nicht ändern, da ich ihn an der Universität verwende. Das Definieren von Zahlen oder Achsen ist keine Option, da Phylo.draw() eine eigene erstellt.

Hat jemand irgendwelche Vorschläge, wie man das Problem löst, vielleicht die y-Achse dehnen?

Bisher war ich mit dem folgenden Code, um den Baum zu produzieren:

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

Antwort

3

Phylo.draw() als Argument nimmt die Achsen. Aus der Dokumentation des Verfahrens in biopython können Sie die folgenden

Achsen lesen: matplotlib/pylab Achsen Wenn eine gültige matplotlib.axes.Axes Instanz, die Phylogramm in diesen Achsen aufgetragen. Standardmäßig (Keine) wird eine neue Figur erstellt.

Dies bedeutet, dass Sie Ihre eigenen Achsen mit Ihrer gewählten Größe laden können. Zum Beispiel

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 

Lassen Sie mich wissen, ob dies für Sie funktioniert. Fábio

+0

Perfekt, vielen Dank, das ist genau das, was ich wollte. Eine andere Sache, die Sie vielleicht auch wissen, ist, wie Sie die maximale Anzahl von Zeichen der Blattknoten erweitern können. Wie Sie sehen, werden einige Namen abgekürzt und mit '...' vervollständigt. – madcap

+0

@madcap Wie bei der Schriftgröße versuchen Sie etwas, das sich mit der Linienbreite beschäftigt (rcParams ["lines.linewidth"]). Es könnte funktionieren. Wenn nicht, lass mich wissen, dass ich weiter schauen werde. Kannst du mir deinen Beispielbaum irgendwie schicken, damit ich damit spielen kann? Fábio –

+0

Probieren Sie den folgenden Teil der Baumstruktur aus, in dem fünf der Blattknoten-Namen zu lang sind und nicht vollständig angezeigt werden. – madcap