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
pythondiger
User
Beiträge: 12
Registriert: Freitag 26. Dezember 2014, 15:45

Sonntag 28. Dezember 2014, 20:59

Hallo zusammen,

ich habe dank eines Raspberry Python entdeckt.
Nun habe ich eine kleine Applikation geschrieben.
Als Neuling dieser Sprache bereitet einem dabei manches Kopfzerbrechen (warum geht das jetzt so ?).
Ich nutze unter anderem die Matplotlib, ein wie ich mittlerweile festgestellt habe, riesiges Werkzeug mit einer Vielzahl an Funktionalitäten.
Natürlich auch mit einer Unmenge an Dokumentation (2600 Seiten Umfang allein für die "offizielle" Dokumentation).
Das ist alles sehr umfangreich und es bedarf noch einiger Arbeit von mir, um das zu sichten.

Mein kleines Projekt protokolliert Datum und Temperatur und gibt die gesamte Datenmenge als Diagramm aus.
Soweit sind meine ersten Versuche bereits erfolgreich gewesen.
Nun würde ich das Diagramm gerne verbessern.
Ich würde gerne auf ein (weiteres Diagramm) nur einen Teil der Daten (z.B. die letzten 24 Stunden) ausgeben.
Im der Doku habe ich eine Funktion set_data_interval(vmin, vmax, ignore=False) gefunden. allerdings keine Beispiele dazu.
Wie muss ich diese denn mit Datums- und Zeitwerten aufrufen?

Danke für eure Hilfe
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Sonntag 28. Dezember 2014, 21:22

Hallo pythondiger,
wie sieht denn dein Code bisher aus?

Wenn er schon etwas länger geworden ist bietet sich http://www.python-forum.de/pastebin.php an.

Gruß Sebastian
pythondiger
User
Beiträge: 12
Registriert: Freitag 26. Dezember 2014, 15:45

Sonntag 28. Dezember 2014, 21:47

Hallo Sebastian,

hier ist der Ausschnitt zum Erzeugen der Diagramme

Code: Alles auswählen

        # Jetzt noch die Graphik erzeugen ...
        my_plot = plot.figure ()
        plot.title ("Wetterdaten")
        plot.ylabel ("Temperatur (Grad C)")
        plot.xlabel ("Zeit")

        plot.setp (plot.gca().get_xticklabels(), rotation=35)
        plot.grid (True)

        plot.plot(history["x"], history["y"], color='#4884FF', linewidth=2,  label = "Temperatur")
        plot.savefig(plot_file_temp1, format="png", dpi = 100)
Funktioniert auch bestens.
Ein erster Versuch danach in einem weiteren Diagramm die Ausgabe einzugrenzen, war bislang erfolglos.
Hier der Ausschnitt

Code: Alles auswählen

        plot.clf
        plot.title ("Zweiter Test")
        plot.ylabel ("Temp")
        plot.xlabel ("Datum")
        plot.axis.XAxis.set_data_interval (datetime.now()-86400, datetime.now())
        plot.plot (history["x"], history["y"])
        plot.savefig (plot_file_hum, format="png")
Starte ich das Programm, so erhalte ich keinerlei Ausgaben mehr (ich habe einige Testausgaben im Programm) und leider auch keine Diagramme.

Aus der Dokumentation von Matplotlib werde ich allerdings auch nicht ganz schlau.
Da finde ich
class matplotlib.axis.XAxis(axes, pickradius=15)
Bases: matplotlib.axis.Axis
Init the axis with the parent Axes instance
[...]
set_data_interval(vmin, vmax, ignore=False)
set the axis data limits
Spreche ich die x-Achse richtig an?
Oder habe ich ein Problem mit der Zeitangabe?

Edit: Cut&Paste-Fehler korrigiert
Benutzeravatar
MagBen
User
Beiträge: 794
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Sonntag 28. Dezember 2014, 22:08

matplotlib.pyplot.xlim ist die Funktion, die Du brauchst.
a fool with a tool is still a fool, www.magben.de, YouTube
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Sonntag 28. Dezember 2014, 22:19

Habe ich dich richtig verstanden?:
Du möchtest gerne 2 Plots auf einer matplotlib Zeichenfläche darstellen.
--> http://matplotlib.org/examples/pylab_ex ... _demo.html

Einer der beiden Plots soll den gesamten Wertebereich anzeigen, der Andere nur einen Ausschnitt.
--> http://stackoverflow.com/a/18812607

Code: Alles auswählen

ax.set_xlim([0.0,10.0])
pythondiger
User
Beiträge: 12
Registriert: Freitag 26. Dezember 2014, 15:45

Sonntag 28. Dezember 2014, 22:39

MagBen hat geschrieben:matplotlib.pyplot.xlim ist die Funktion, die Du brauchst.
Danke.
Das ist die Lösung.

Code: Alles auswählen

        plot.clf
        plot.title ("Zweiter Test")
        plot.ylabel ("Temp")
        plot.xlabel ("Datum")
        xmin, xmax = plot.xlim()
        plot.xlim (xmax-1, xmax)
        plot.plot (history["x"], history["y"])
        plot.savefig (plot_file_hum, format="png")
Damit erhalte ich nun das Diagramm über die letzten 24 Stunden.
Antworten