sequence logo mit matplotlib

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Eugenie
User
Beiträge: 7
Registriert: Sonntag 27. Januar 2013, 12:43

Hallo,

http://www.nature.com/nmeth/journal/v6/ ... 247-F3.jpg

ich kenne mich nur rudimentär mit matplotlib aus und habe spontan nichts gefunden, aber vielleicht kann mir von euch jemand helfen. Ich würde gern einen plot wie oben verlinkt erstellen, d.h. spaltenweise Buchstaben in verschiedenen Größen darstellen. Weiß jemand, ob man sich das mit matplotlib zusammenbasteln kann?

Vielen Dank schonmal.
schaeffkoch
User
Beiträge: 38
Registriert: Dienstag 21. August 2012, 10:59

Eugenie
User
Beiträge: 7
Registriert: Sonntag 27. Januar 2013, 12:43

Hab ich schon gelesen, danke.
Das Problem ist, dass ich zwar Buchstaben an beliebiger Stelle plotten kann, aber ich kann sie nicht "verzerren", also z.B. die Breite festsetzen bei varierender Höhe. Mit den fontsize Einstellungen ändert sich immer beides gleichzeitig.
Sirius3
User
Beiträge: 18227
Registriert: Sonntag 21. Oktober 2012, 17:20

Hallo Eugenie,

um Text zu verändern, brauchst Du PathEffects. Leider gibt es nichts vorgefertigtes,
sondern Du mußt Dir selbst eine Klasse schreiben:

Code: Alles auswählen

import matplotlib.pyplot as plt
import matplotlib.patheffects

class Scale(matplotlib.patheffects._Base):
    def __init__(self, sx, sy=None):
        self._sx = sx
        self._sy = sy
        
    def draw_path(self, renderer, gc, tpath, affine, rgbFace):
        affine=affine.identity().scale(self._sx, self._sy)+affine
        renderer.draw_path(gc, tpath, affine, rgbFace)

plt.figure()
txt = plt.text(0, 0, "T", fontsize=64,color='red')
txt.set_path_effects([Scale(1,5)])
txt = plt.text(0.1, 0, "G", fontsize=64,color='green')
txt.set_path_effects([Scale(1,3)])
txt = plt.text(0.2, 0, "B", fontsize=64,color='blue')
txt.set_path_effects([Scale(1,7)])
plt.show()
Grüße
Sirius
Eugenie
User
Beiträge: 7
Registriert: Sonntag 27. Januar 2013, 12:43

Danke Sirius3, leider war dein Code noch etwas ungeeignet, da ich alles pixelgenau berechnen musste (oder ich hab irgendwas falsch verstanden an deinem Code). Jedenfalls hab ich das mittlerweile mit Tkinter und canvas sehr gut hingekriegt, siehe Bild :)
Trotzdem vielen Dank für eure Mühe.

http://img21.imageshack.us/img21/7977/lib03.png
Antworten