Seite 1 von 1

Matplotlib

Verfasst: Sonntag 28. Dezember 2014, 20:59
von pythondiger
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

Re: Matplotlib

Verfasst: Sonntag 28. Dezember 2014, 21:22
von Mr_Snede
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

Re: Matplotlib

Verfasst: Sonntag 28. Dezember 2014, 21:47
von pythondiger
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

Re: Matplotlib

Verfasst: Sonntag 28. Dezember 2014, 22:08
von MagBen
matplotlib.pyplot.xlim ist die Funktion, die Du brauchst.

Re: Matplotlib

Verfasst: Sonntag 28. Dezember 2014, 22:19
von Mr_Snede
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])

Re: Matplotlib

Verfasst: Sonntag 28. Dezember 2014, 22:39
von pythondiger
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.