[Anfaengerfrage] matplotlib

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
druuhl
User
Beiträge: 2
Registriert: Donnerstag 9. Juni 2016, 07:15

Ich habe vor kurzem mit python angefangen und es macht auch soweit Laune, damit erst mal Hallo.

Ich habe eine Liste mit je zwei Daten (Datumstring, float) und will das in einem histograph plotten.
Ich stehe jetzt wirklich auf dem Schlauch wie ich diese Daten in matplotlib sauber uebergeben und dann per png exportiert bekomme, ich waere dankbar fuer ein kommentiertes Beispiel aus dem die Basis hervorgeht.

Meine Daten mit print(memUsed) ausgegeben Reformatierung des Datum ist hintenangestellt, wenn ich weiss was ich brauche.

Code: Alles auswählen

['2016-06-09T06:10:01.549Z', '1003367.0', '2016-06-09T05:40:01.896Z', '776825.0', '2016-06-09T05:25:01.534Z', '849518.0', '2016-06-09T05:25:01.534Z', '607839.0', '2016-06-09T05:15:01.322Z', '668590.0', '2016-06-09T04:55:01.251Z', '788957.0', '2016-06-09T04:40:01.896Z', '927595.0', '2016-06-09T04:30:01.652Z', '942172.0', '2016-06-09T04:20:01.417Z', '1032131.0', ....']
Bisher im Code, aber noch nicht so richtig verstanden

Code: Alles auswählen

import matplotlib.pyplot as plt
.
.
.
x = []
y = []

for point in MemUsed:
     x.append(point[0])
     y.append(point[1])
plt.savefig('foo.png')
plt.plot(x,y)
f.close()
plt.close()

Gruss Stefan
Zuletzt geändert von Anonymous am Donnerstag 9. Juni 2016, 08:24, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
druuhl
User
Beiträge: 2
Registriert: Donnerstag 9. Juni 2016, 07:15

Noch eine Kleinigkeit, matplotlib soll nicht versuchen den Plot direkt anzuzeigen, sondern nur in das png exportieren, da ich aufgrund von Abhaengigkeiten auf einem Server arbeite.
Sirius3
User
Beiträge: 17748
Registriert: Sonntag 21. Oktober 2012, 17:20

Hast Du Dir schon die Beispiel-Seite von matplotlib angeschaut, insbesondere zur Datumsausgabe?
Ganz praktisch auch die How-To-Seite.
BlackJack

@druuhl: Im Text schreibst Du es wären Datumsstring und `float`, in der Liste sind aber keine `float`\s sondern nur Zeichenketten. Was hast Du denn nun *tatsächlich*?

Und wie kommt die Liste zustande? An der Stelle sollten die Daten nämlich schon in passenden Formaten vorliegen, also zum Beispiel `datetime.datetime`-Objekte und `float`-Objekte. Und so wie der danach gezeigte Code das benutzt, sollte das auch keine flache Liste sein, sondern eine in der die beiden jeweils zusammengehörigen Werte in einer Sequenz, zum Beispiel Liste oder Tupel, zusammengefasst sind. Das wäre auch die sinnvollere Art diese Daten zu strukturieren.


Der Code kann nicht mit den gezeigten Daten umgehen und ist teilweise offensichtlich unsinnig. Du speicherst ein PNG bevor überhaupt etwas geplottet wurde. Du versuchst Zeichenketten als numerische Werte zu plotten, das geht natürlich nicht. Das `f.close()` gehört da eher nicht hin, denn an der Stelle sollte die Datei bereits geschlossen worden sein, denn die Daten sind ja mindestens in Zeile 11 bereits komplett eingelesen, wenn nicht bereits viel früher. Du willst den Plot nicht anzeigen, hast da ja auch keinen Code der das tut, also was soll `plt.close()` dann bewirken? Das sieht alles ein wenig geraten und nie ausprobiert aus. So funktioniert Programmieren eher nicht.

Beispiele hat die Matplotlib-Dokumentation mehr als genug. Such Dir zum Beispiel in der „Gallery“ etwas aus was vom aussehen her hinkommt und schau Dir dann den Quelltext dazu an.

Ansonsten musst Du das Programm in der richtigen Reihenfolge entwickeln. Also nicht solange die Daten noch nicht in einem Format vorliegen das man auch tatsächlich plotten kann, auf gut Glück Zeilen zusammenschreiben die das Plotten nehmen, denn die kann man erst testen wenn die Daten dann auch vorliegen. Also sollte man das Teilproblem zuerst lösen.

Wie sollen die Datumsangaben denn interpretiert werden? Sollen die unabhängig vom Wert in gleichmässigen Abständen als Beschriftung dienen? Dann sind es keine Daten für die X-Achse sondern Beschriftungen für die X-Achse und die Daten sind einfach die Zahlen von 0 bis Anzahl der Datenpunkte - 1. Falls die Datumsangaben tatsächlich vom Wert her berücksichtigt werden sollen, böte sich `plot_date()` eher an als `plot()`.

Wie liegen die Daten eigentlich *tatsächlich* vor? Falls das eine Textdatei ist, würde ich schauen ob man das mit Numpy eingelesen bekommt.
Antworten