Alternative zu Matplotlib gesucht!

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
acidk
User
Beiträge: 75
Registriert: Samstag 6. Januar 2007, 18:54
Wohnort: Braunschweig

Hi!

Nachdem ich meine Ram Probleme in matplotlib gelöst habe geht 's auch schon weiter:

Meine Koordinatenlisten , die ich mit durch das Auslesen mit pybel (openbabel) bekomme werden komplett durcheinander gewürfelt - einzig und allein durch die Anweisung:

Code: Alles auswählen

import pylab
.

(Ohne Import Anweisung absolut überhaupt keine Probleme).

Nun bin ich auf der Suche nach einer anderen (gut funktionierenden und einigermaßen bedienbaren) Alternative zu Matplotlib.

Ich will nur einen einfachen 2D Plot ertellen (Punkte; x vs. y) und die entsprechende Grafik speichern.


Hat von Euch jemand einen Tip?

Danke
alban
User
Beiträge: 8
Registriert: Mittwoch 19. April 2006, 23:44

Bei dem Stichwort abspeichern fällt mir die Python Image Library (PIL) ein:

http://www.pythonware.com/products/pil/

Damit kann man auch plotten wenn ich mich recht entsinne.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

alban hat geschrieben:Damit kann man auch plotten wenn ich mich recht entsinne.
Viel Spaß damit ...

acidk hattest Du diesbezüglich unlängst auf der MPL-Mailingliste gepostet? Dort gab es eine entsprechende Anfrage wegen openbabel. Wenn ja: Magst Du vielleicht ein Minimalskript kreiren, das Dein Probem wiedergibt? Das Problem ist irgendwie total seltsam. Ich bin sicher, daß das auf der MPL-Liste entsprechend gewürdigt wird.

Danke,
Christian
acidk
User
Beiträge: 75
Registriert: Samstag 6. Januar 2007, 18:54
Wohnort: Braunschweig

Hi!
Ja - ich hatte es in der Matplotlib Mailing Liste geposted --- und nicht erwarted, dass überhaupt jemand darauf reagiert

Code: Alles auswählen

import os

import pybel
import openbabel
from openbabel import*
import Bio.PDB

#import pylab ---> hier gehen die Probleme los!

def projecting_smarts(isolated_ligand, method ,color, output):
	
	print "Uebergabe ok"
	print "\n"
	print isolated_ligand
	print "\n"
	
#### Bio PDB	
	parser = Bio.PDB.PDBParser()
	structure = parser.get_structure('s', isolated_ligand)
	atom = structure.get_atoms()		
###

	print "smarting successfully started!"
	mol = pybel.readfile("pdb", isolated_ligand).next()
	smart_list	= []	
	result_acceptor = method.findall(mol)			#findet die Akzeptoren -> method entspricht smart Definition

Übel ist: Allein durch den Import von pylab erhalte ich smarts mit völlig anderen Eigenschaften (Dry = ("[a]") wird so z.B. überhaupt nicht mehr
gefunden; bzw. völlig anderen Koordinaten), wobei das Programm bis zum Ende durchläuft. Vielleicht sollte ich mir

Code: Alles auswählen

from openbabel import*
nochmal ansehen...
alban hat folgendes geschrieben:
Damit kann man auch plotten wenn ich mich recht entsinne.

Viel Spaß damit ...
War das jetzt Zynismus???

:twisted:
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

acidk hat geschrieben:

Code: Alles auswählen

import openbabel
from openbabel import*
Das sieht extrem merkwürdig aus. Schmeiß mal den Stern-Import raus.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

acidk hat geschrieben:Ja - ich hatte es in der Matplotlib Mailing Liste geposted --- und nicht erwarted, dass überhaupt jemand darauf reagiert
Wie John schon schreibt:Es gibt da ein paar Ungereimtheiten. Mag sein, daß diese "weggehen" wenn Du ein anderes Plottingtool nimmst, aber Zweifel sind angebracht:
  • - Du machst immer noch mit Sternchenimporten rum.
    - Dein hier gezeigter Code importiert Bio.PDB, was bis jetzt auf Numeric zurückgreift. John hatte ja schon erklärt, daß jetzt numpy (schon eine Weile) aktuell ist.
    - Der hier gezeigt Code ruft die gezeigte Funktion gar nicht auf - man weiß nicht was die Übergabeparameter sind.
    - openbabel wird zwar importiert, aber nicht transparent verwendet.
    - Es ist auch nicht klar wo der Zusammenhang zwischen pylab, Bio.PDB-Objekten und openbabel-Objekten liegen könnte.
Versuche doch bitte auch für Dich selbst, Deine Funktionen in kleine Einheiten zu zerlegen. Wenn nicht klar ist, was woher kommt und wohin geht, wirst Du immer wieder solche Probleme haben - unabhängig vom Toolkit. Beim letzten Mal hast Du das Problem glücklicherweise isolieren können, aber das lag nicht an der gelungen Analyse des Problems, so wie wir es im Forum gesehen haben.

Die Ratschläge von BlackJack (beim letzten Mal) und mkallas sind Gold wert ...
acidk hat geschrieben:War das jetzt Zynismus???
Ein Wenig ... Natürlich kann man mit einer Bildbearbeitungslibrary auch plotten - aber das ist schon eine ziemlich anstrengende Alternative. Denke am besten nicht ernsthaft darüber nach. Chaco, wie von John vorgeschlagen, oder andere *dafür gemachte* Tools sind eine bessere Alternative. Plottinglibraries nutzen eigentlich immer selber irgendwelche Bildbearbeitungslibraries im Hintergrund (natürlich nicht unbedingt auf Pythonebene). Du willst nicht selber den "glue" schreiben, damit Du schöne Plots mit PIL oder zlib oder was-auch-immer machen kannst.

Gruß,
Christian

PS "aktuelle Version" == "current version" oder etwas Ähnliches, schreibe nicht "actual version". ;-)
PPS biopython wird auch nach numpy migrieren. Ich nehme aber an: Erst mit einer numpy-Version für Python 3.0.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Was Dich noch interessieren dürfte, wenn Du über einen Umstieg nachdenkst: http://code.enthought.com/projects/chac ... #pros-cons
acidk
User
Beiträge: 75
Registriert: Samstag 6. Januar 2007, 18:54
Wohnort: Braunschweig

- Du machst immer noch mit Sternchenimporten rum.
Jetzt wirklich nicht mehr :D -hat aber auch nichts gebracht :x
- Dein hier gezeigter Code importiert Bio.PDB, was bis jetzt auf Numeric zurückgreift. John hatte ja schon erklärt, daß jetzt numpy (schon eine Weile) aktuell ist.
- Der hier gezeigt Code ruft die gezeigte Funktion gar nicht auf - man weiß nicht was die Übergabeparameter sind.
- openbabel wird zwar importiert, aber nicht transparent verwendet.
- Es ist auch nicht klar wo der Zusammenhang zwischen pylab, Bio.PDB-Objekten und openbabel-Objekten liegen könnte.
Ich wollte Euch den gesamten Code ersparen:
http://paste.pocoo.org/show/77921/

Mein unorthodoxer Lösungsansatz: import pylab (Z. 56) LOKAL(!) importieren - (plotting nur exemplarisch [geht im Originalcode aber auch mit übergebenen Argumenten]).

Bio PDB verwende ich im Original Code inzwischen auch nicht mehr (ich ziehe mir die Koordinaten direkt aus Openbabel).

:twisted:
Code funktioniert - Plotting ohne die Smarts zu zerschießen!
acidk
User
Beiträge: 75
Registriert: Samstag 6. Januar 2007, 18:54
Wohnort: Braunschweig

zu früh gefreut... ich hatte mir zunächst nur das geschriebene SD file (flat text) angeschaut.

Es werden zwar alle Smart eigenschaften geschrieben, diese liegen jedoch nicht auf dem Liganden--- und jetzt weiß ich echt nicht mehr weiter

:K *heul*
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

acidk hat geschrieben:und jetzt weiß ich echt nicht mehr weiter
Sorry, aber Du zeigst immer noch Code der so nie funktioniert haben kann, bzw. den man als Außenstehender nicht einschätzen kann:
- Du vermischt immer noch Bio.PDB mit openbabel. Das mag ok sein, aber ich finde so wie Du es machst einfach nur verwirrend.
- Man weiß nicht wie die Funktionen aufgerufen werden. Das ist kein funktionierendes Minimalbeispiel.
- Auch hier gilt - wie im Kommentar von BlackJack im letzten Thread: Du könntest den Code wesentlich vereinfachen und ggf. die Funktion aufsplitten.
- Zeile 35 kann ich nicht ohne vorherige Info verstehen - sonst irgendjemand? Kannst Du es in einem Monat verstehen? Falls nicht, so empfiehlt sich die Logik einer solchen Zeile zu kommentieren.
- In Zeile 41 steht 'molecule' - aber das wurde vorher nicht definiert, wohl aber weiter unten erzeugt. Aber es wird nicht übergeben.
- In Zeile 42 wird einem Atom mit SetAtomicNum() eine 'color' zugewiesen. Abgesehen davon, das es seltsam klingt: Was ist 'color'? Das ist zwar definiert, aber nicht erklärt.
- projecting_smarts() ist eine Funktion mit insgesamt 23 lokalen "Variablen". Ich bin zwar selber nicht übermäßig streng in diesen Dingen: Aber da ist Refactoring in jedem Fall angebracht (s.o.).
- In plot_smarts() gibt es 'vector_list', aber es wird nicht verwendet. Geplottet wird Irgendwas.
- In Zeile 93 definierst Du 'isolated_ligand', der dann in Zeile 7 durch einen String überschrieben wird.
- Sind die runden Klammern in Zeile 93 wirklich nötig?
- In Zeile 96 weist Du 'plot_dry' plot_smarts(), einer Funktion ohne 'return'-Statement zu.
- Kennst Du

Code: Alles auswählen

if __name__ == "__main__":
?

Insgesamt gibt es so viele Ungereimtheiten, daß ich mich frage, ob Du nicht erst mal den Code aufräumenen solltest, ehe wir über Bugs in den Libraries spekulieren.

Bitte schreibe ein funktionierendes Minimalbeispiel: Du darst voraussetzen, daß wir Zugang zu RCSB haben. Die anderen Libraries habe ich ebenfalls installiert.

Gruß,
Christian

edit: Fehlerkorrektur im zweiten Punkt.
acidk
User
Beiträge: 75
Registriert: Samstag 6. Januar 2007, 18:54
Wohnort: Braunschweig

Danke für Eure Mühen - an meiner Programmiertechnik gibt es sicher noch einiges zu optimieren :roll: - ich arbeite daran.

- In Zeile 41 steht 'molecule' - aber das wurde vorher nicht definiert, wohl aber weiter unten erzeugt. Aber es wird nicht übergeben.
- In Zeile 42 wird einem Atom mit SetAtomicNum() eine 'color' zugewiesen. Abgesehen davon, das es seltsam klingt: Was ist 'color'? Das ist zwar definiert, aber nicht erklärt
Molekül wird erzeugt - in 41/42 werden Atome unterschiedlicher Farbe in dieses Molekülobjekt geschrieben.

Ach ja - Problem gelöst. Ich verwende statt Matplotlib nun Gnuplot - und es läuft diesmal anstandslos.

Gruß,

Florian[/quote]
Antworten