Fragen zu 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
Goa
User
Beiträge: 18
Registriert: Dienstag 10. Oktober 2006, 11:00

Hi,

ich hoffe ihr könnt mir bei diesen Fragen zu matplotlib helfen.

1) Wenn ich von der Ipython shell aus ein script ausführe in dem ich einen Graphen plotte, geht der Fokus beim ersten mal auf das Graph Fenster, und ich kann die shell erst wieder verwenden wenn ich das Fenster geschlossen habe. Wenn ich nun das selbe script ein anderes mal ausführe, geht der Fokus nicht mehr aufs Graph Fenster, ich kann dafür aber die IPython shell direkt wieder benutzen, ohne das Graph Fenster wieder schliessen zu müssen.
Und nun die Fragen:
Was muss ich ändern, damit ich auch schon beim ersten mal direkt die IPython shell weiter verwenden kann?

Wie kann ich die "Position" eines Fensters kontrollieren?
Wenn ich zusätzliche Fenster geöffnet habe würde ich gerne bei einem Plot automatisch das Graphen Fenster und das Ipython in den Vordergrund rufen.

2) Wie kann ich das Format in dem die x-Achsen Beschriftungen angezeigt werden verändern? Ich würde z.B gerne ein Format im Stil %2.2f haben.

Danke für eure Antworten
Goa
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi Goa und willkommen im Forum,

ad 1) Wenn Du ipython startest, dann am besten mit:
$ ipython -pylab -p myprofile (Siehe Doc-Seite) Damit erreichst Du zumindest, daß der pylab (!) namespace vorhanden ist und Dein rc-File mit Sicherheit gelesen wird. U. U. wird das nicht das Problem des Fokus lösen. Wenn ich mich recht entsinne gibt es hierzu eine Lösung, aber ich weiß nicht mehr welche. Am besten fragst Du hier nach, wenn nicht sonst aus dem Forum Bescheid weiß. Ob Du die Fensterposition überhaupt aus ipython bestimmen kannst, weiß ich nicht.
ad 2) Wo ist das Problem?

Code: Alles auswählen

xlabel(r'$%2.2f$' % number)
# oder für ticks
xticks( xdata, ['%2.2f' % x for x i xdata])
Letzteres ist natürlich etwas umständlich, verdeutlicht aber hoffentlich das Prinzip, oder?

Gruß,
Christian
Goa
User
Beiträge: 18
Registriert: Dienstag 10. Oktober 2006, 11:00

Hi und erst mal danke für die Antwort,

Da hab ich doch glatt vergessen ein allgemeines Hallo loszulassen, aber da ich normalerweise mit der Suchfunktion alles gefunden habe, fühlte ich mich schon richtig heimisch ohne auch nur einen post zu haben...

und nun zu 2)

um was es mir ging waren die ticks, und die zweite Lösung die du mir vorschlägst funktioniert auch soweit, nur hab ich relativ grosse Datensätze, das heisst dass ich dein Beispiel natürlich nicht direkt nehmen kann sondern halbwegs intelligent "slicen" muss.
Da das matplotlib im Prinzip schon sehr gut beherrscht, habe ich gehofft dass es eine Funktion gibt die nur die Formattierung ändert, nicht aber die Werte der ticks.

Gruss, Goa
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi,

Du kannst auch nur eine Liste von ticks übergeben. mpl versucht dann diese ticks gleichmäßig zu verteilen. Das Risiko ist, daß die Verteilung der ticks dann nicht mehr so flexibel ist und Du höllisch aufpassen mußt, immer die richtigen ticks zu haben. Das funktioniert mit allen "tick"-Methoden (xticks, set_xticklabels, etc.):

Code: Alles auswählen

x.set_xticklabels(['','','280','','','340','','',''])
wobei "leere" Strings zwar einen Tick ergeben, aber ohne Beschriftung.

Gruß,
Christian
Goa
User
Beiträge: 18
Registriert: Dienstag 10. Oktober 2006, 11:00

Ich hab gerade selber noch eine bessere Methode gefunden:
Ich hol mir erst die Liste der schon existierenden ticks, und benutze diese dann mit deinem code.

Code: Alles auswählen

xt = xticks()[0]
xticks(xt, ['%2.2f' % el for el in xt])
Sieht doch ganz nett aus, oder?

Edit: Hm, der code funktioniert zwar, aber die xticks werden beim zoomen nicht mehr dynamisch angepasst, ich bin also weiterhin für Verbesserungsvorschläge offen...
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Tja, Dein Code ist fast gleich meinem ersten Vorschlag - außer, daß Du den Umweg über andere Objekte gehst. Eigentlich equivalent. Es läuft halt darauf hinaus eine feste Liste der Ticklabels zu übergeben.

Und in der "festen" Liste liegt auch schon das Problem, wenn Du eine interaktive Session hast und zoomen willst, empfehlen sich ticker.Formatter:
*Pseudo Code, weil ich gerade keine Zeit habe, meine Arbeit ruft*

Code: Alles auswählen

import matplotlib.ticker
ax = gca()
ax.xaxis.set_major_formatter(matplotlib.ticker.FormatStrFormatter('%2.2f'))
Das solltest Du natürlich etwas schöner importieren und schreiben .... ;-)

Diese Lösung hätte vielleicht vorher schon erwähnen sollen :oops: .

Gruß,
Christian

PS Auf der mpl web page, gibt es ein Tutorial, ein Cookbook (sogar mit Einträgen von mir ;-) ) und mit dem Download erhälst Du auch ein "examples" directory mit vielen wirklichen guten Beispielen, u. a. eines mit dem Namen "newscalarformatter_demo.py".
Goa
User
Beiträge: 18
Registriert: Dienstag 10. Oktober 2006, 11:00

Perfekt, das war genau das was ich gesucht hab, vielen Dank.
Die Beispiele hab ich mir natürlich teilweise angeschaut, aber wie immer ist es schwierig das richtige zu finden wenn man nicht genau weiss wonach man suchen soll, und es sind ja nicht gerade wenige Beispiele...
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Goa hat geschrieben:... und es sind ja nicht gerade wenige Beispiele...
Stimmt :) - wollte Dich auch nur für den Fall, daß Du etwas noch nicht kennst darauf hinweisen.

Na, jedenfalls funktioniert jetzt hoffentlich alles so wie es soll. Wäre schön, wenn Du im Forum ab und zu auftauchen würdest.

Gruß,
Christian
Goa
User
Beiträge: 18
Registriert: Dienstag 10. Oktober 2006, 11:00

CM hat geschrieben:Wäre schön, wenn Du im Forum ab und zu auftauchen würdest.
Ich bin eigentlich ziemlich treu und schau regelmässig vorbei, aber bis jetzt hab ich noch alles was ich wissen wollte per Suchfunktion gefunden... aber falls du mich hiermit dazu aufforderst dumme Fragen zu stellen und die Suchfunktion zu ignorieren: :twisted:
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Ja, das vielleicht auch - aber eigentlich könntest Du genausogut Tipps geben wie andere ... :twisted: :twisted:
:wink:
Goa
User
Beiträge: 18
Registriert: Dienstag 10. Oktober 2006, 11:00

Hm, könnte ich.
Aber da ich mich noch irgendwo auf dem Weg von "ich kann ein bischen programmieren" zu "meine Programme laufen zwar, aber ich weiss nicht warum" befinde, befürchte ich dass ihr zu viel Zeit damit verbringen würdet den Blödsinn den ich erzähl zu korrigieren :)
Aber mal schauen...
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Nachtrag: Im cheeseshop gibt es jetzt ezplot:
http://cheeseshop.python.org/pypi/ezplot/0.1.0a
fürs interaktive plotting und debugging in ipython. Laut cheeseshop nur für Windows, aber der Autor meinte bei der Ankündinung in der numpy-mailingliste, daß es *wahrscheinlich* auch auf anderen Platformen laufen wird.

Gruß,
Christian
Antworten