Phython: Matplotlib



  • https://www.golem.de/news/matplotlib-einstieg-in-die-datenvisualisierung-mit-python-2402-181975.html

    Hallo, hat damit jemand schon mal etwas gemacht? Ist das "die" Library für Data Scientists, oder gibt es auch andere? Und ist der Einstieg (besonders) schwer?



  • Hallo, hat damit jemand schon mal etwas gemacht?

    Ja, täglich.

    Ist das "die" Library für Data Scientists, oder gibt es auch andere?

    Ja und ja. Viele wie z.B. seaborn bauen aber auf matplotlib auf.

    Und ist der Einstieg (besonders) schwer?

    Nein. Einfach ausprobieren! Nimm ein Jupyter Notebook und auf gehts! Vielleicht noch Pandas für deine Daten einsetzen.

    Es ist nur manchmal gewöhnungsbedürftig, dass es globale Objekte gibt, Stichwort gca und so weiter. Ich kämpfe auch immer gegen Plotstile, die Legendenposition (insbesondere wenn ich variabel viele Dinge im Plot habe und nicht weiß, ob die Legende links oder rechts besser aufgehoben ist - und die Automatik manchmal nicht "gut genug" ist) und so weiter. Meistens reichen mir aber die Defaults, nur selten muss ein Plot "kundenfertig" sein. Dann kann man zur Not aber alle Legenden weglassen und im Präsentationsprogramm einfach drübermalen. Ist vielleicht nicht professionell, aber geht oft schneller. Zumindest bei mir.

    Phython

    Ein h zu viel.



  • Danke, ich werd mal "reinschnuppern", wenn Zeit ist...



  • @wob sagte in Phython: Matplotlib:

    Ein h zu viel.

    Das Smartphone war's... 😜

    Ich weiß natürlich, wie man das schreibt 😅


  • Mod

    @wob sagte in Phython: Matplotlib:

    Es ist nur manchmal gewöhnungsbedürftig, dass es globale Objekte gibt, Stichwort gca und so weiter.

    Wichtiger Tipp: Matplotlib hat quasi zwei Interfaces. Einmal ein matlab-artiges, imperatives Interface (das was sich 'pyplot' nennt), wo man mit einem globalem Plotkontext arbeitet und dieses Schritt für Schritt modifiziert. Und ein ganz anderes, objektorientiertes Interface, wo man Plotobjekte hat und deren Eigenschaften setzt. Mit beiden Interfaces kann man alles machen! Aber wenn man Hilfe im Netz zu matplotlib sucht, ist es wichtig zu verstehen, welche Interfaceart die Antwort nutzt, und das ggf. für die eigenen Bedürfnisse übersetzen.

    Das objektorientierte Interface ist offensichtlich das, was man will, wenn man matplotlib innerhalb eines Programms einsetzt. Das pyplot Interface kann ganz nützlich sein in einem interaktiven Kontext wie Jupyter, wenn man einfach nur schnell irgendetwas auf den Bildschirm bringen will. Ich mag da normalerweise trotzdem den objektorientierten Modus, weil man den Code dann auch hinterher in richtige Programme kopieren kann, aber hier liegt ganz klar der Daseinszweck des pyplot Interfaces.

    Ansonsten allgemein zu Visualisierung in Python: Reine matplotlib ist meiner Meinung nach immer noch Nummer 1, wenn man Code braucht, der auch in einem Jahr noch läuft. Es ist vermeintlich schwieriger, überhaupt irgendetwas zu plotten, aber wenn man erst einmal etwas hat, dann funktioniert das auch, und vor allem kann man auch Dokumentation finden, was und wie man damit alles machen kann. Es werden jedes Jahr mehrere neue Plotting-Säue durch das Python-Dorf getrieben, die ganz tolle Versprechungen machen, wie toll intuitiv und einfach man damit Daten darstellen kann. Meiner Erfahrung nach stimmt das auch so halbwegs, aber sie haben oft gravierende Nachteile, die sie nicht über ein Spielzeugstadium hinausgehen ließen:

    1. Die Hälfte der Features sind meist noch Versprechen, die nie kommen
    2. Die API ändert sich alle paar Monate abwärtsinkompatibel
    3. Entsprechend findet man auch keine aktuelle Doku oder Hilfe. Meistens ist die ganze Doku ein Demonotebook.
    4. Wenn dein Chef sagt "Mach die Linie blau statt rot" bist du aufgeschmissen, denn die Grundeinstellung ist meistens "Das Framework weiß was richtig ist und nimmt solche Entscheidungen dem Nutzer ab".
    5. Nach einem Jahr wandern die Entwickler alle zur nächsten Sau, wo sie versprechen, dass alles besser wird
    6. Später kommt man dann in die Versionshölle, weil diese Plotframeworks starke externe Abhängigkeiten haben. Wenn die externen Abhängigkeiten updaten, aber kaum mehr jemand an der Anpassung des Frameworks interessiert ist, hat man den Salat.
    7. Bonuspunkt, nur für manche: Das Framework will nach Hause telefonieren, weil die Plots letztlich auf der Plattform des Herstellers erzeugt und gehosted werden, nicht bei dir lokal.

    Versteht mich nicht falsch: Diese Frameworks sind ganz wunderbar toll, wenn man nur fix irgendwie irgendetwas plotten möchte und keine Sonderwünsche hat. Aber man sollte nichts darauf aufbauen, was man später noch einmal braucht.



  • Das was @SeppJ sagt, kann ich voll und ganz unterschreiben.

    Zu den Interfaces muss man sich merken, dass es ax.set_title, aber plt.title heißt und so weiter (mit import matplotlib.pyplot as plt). Das ist schon manchmal etwas nervig, vor allem wenn man Code bekommt, wo man das in gemischter Form bekommt.

    Inkompatibilitäten hatte ich öfter mit seaborn. War zwar automatisch alles schön und gut, ging beim Update kaputt und ich habe es im Endeffekt nicht geschafft, in den Plot eine weitere Linie einzuzeichnen. Lösung war dann: eben schnell alles in matplotlib direkt machen. (und bei Pandas geht eigentlich auch mit jedem Versionssprung irgendein Test bei uns kaputt, ich musste bei 2.2.0 z.B. 2 Bugs reporten)

    Zu Linienfarbe ändern: ist manchmal schneller, da in Powerpoint einfach drüberzumalen oder den Plot schnell in einem Bildeditor zu ändern... btdt 😞


  • Mod

    @wob sagte in Phython: Matplotlib:

    Zu Linienfarbe ändern: ist manchmal schneller, da in Powerpoint einfach drüberzumalen oder den Plot schnell in einem Bildeditor zu ändern... btdt 😞

    Alles schon gemacht 😃
    Ein Hoch auf Frameworks, die Export in Vektorgrafikformaten wie SVG ermöglichen, da geht das dann einfach in der Nachbearbeitung. So bekommt man auch leicht Achsenbeschriftungen mit mathematischer Formatierung.



  • Ich finde https://plotly.com/ noch ganz nett. Da finde ich die out of the box experience immer besser. Bisher habe ich auch noch keine Limitierungen gefunden, wenn man viel anpassen will. Auch die Dashboard Funktionalität ist sehr cool (Dash by plotly) 🙂

    @SeppJ sagte in Phython: Matplotlib:

    Einmal ein matlab-artiges, imperatives Interface (das was sich 'pyplot' nennt), wo man mit einem globalem Plotkontext arbeitet und dieses Schritt für Schritt modifiziert.

    Noch als Ergänzung: Verwirrenderweise gibt es aber das Interface "pyplot" und das Modul "pyplot", welches beide APIs implementiert. Das importieren von pyplot sagt daher noch nichts über die API aus und ist in jedem Fall notwendig.
    Versuche dies zu ändern (https://github.com/matplotlib/mpl-gui) sind wohl vorerst Versuche geblieben

    @omggg sagte in Phython: Matplotlib:

    Ist das "die" Library für Data Scientists, oder gibt es auch andere?

    Zumindest eine populäre für Visualisierung. Für andere Aufgaben gibt es dann natürlich noch andere Libraries. Die vermutlich wichtigstens in keiner speziellen Ordnung: pandas, pytorch, scipy, sklearn, numpy.
    Darüber hinaus gibt es aber noch X verschiedene weitere sehr verbreitete Libraries je nach Use Case 🙂