GNUPLOT, nicht alle Werte anzeigen

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo, ich bin es wieder.
    Ich muss nochmal kurz nerven.
    Und zwar frage ich mit dem Pi die Zimmertemperatur ab. Die Werte landen dann in folgendem Format in einer Textdatei:

    Mit GNUPLOT lass ich mir den Temperaturverlauf anzeigen. Meine temp.plt sieht dafür so aus:


    Dabei wird auf der X-Achse als beschriftung jede viertelstunde angezeigt. Ich möchte aber nur jeder halbe stunde oder stunde auf der X-Achse anzeigen lassen.
    Kann man das irgendwie mit GNUPLOT realisieren?

    eine gute Nacht wünscht
    eSmurf

  • Hallo eSchlumpf,

    es ist zwar schon Ewigkeiten her, dass ich was mit Gnuplot gemacht habe
    und somit sind meine Erinnerungen daran nur noch vage,
    aber ich meine, dass man das über die tics Funktion einstellt.
    Rufe mal deren Help Screen auf und lies Dich da durch.

  • Life_of_Pi, vielen dank für deine Mühe, aber irgendwie blicke ich da jetzt nicht so genau durch... Was genau muss ich jetzt in die geschweiften Klammern für werte schreiben?

    Außerdem ist heute Nacht ein weiteres Problem aufgetaucht :/
    der Pi hat zwar heute Nacht die temperatur fleißig alle 10 Minuten in die temp-daten.tx geschrieben, gnuplt hat das temperatur.jpg Bild aber nicht mehr aktuallisiert. Dort ist der letzte Wert immer noch 23:45, woran liegt das jetzt schon wieder? Das ist doch echt zum verrückt werden :/

    • Offizieller Beitrag
    Zitat von http://www.techrepublic.com/blog/linux-and-open-source/how-to-handle-time-based-data-with-gnuplot/2671/#.


    The most flexible one is to assign to xtics a start and end value, plus the number of seconds between two consecutive tics. Let's assume, for example, that we want to display one tic every two weeks, on Wednesdays. Since the first Wednesday of 2011 was January 5th and there are 60x60x24x7x2 = 1209600 seconds in two weeks, here's how to plot what you see in Figure D:
    set grid
    set xtics format "%b %d"
    set xtics "20110105", 1209600, "20110430"

    Sieht doch wie ein vielversprechender Ansatz aus.

    Btw. "sinnlose" Formatierungszeichen wie °C haben in einer Datenstruktur nichts zu suchen. Verkompliziert die Auswertung nur unnötig.

  • Ok, dass formatierungsproblem löst sich automatisch, wenn die .txt nicht zu viele Zeilen enthält. Eine Textdatei mit 30 zeilen, bzw ein Anzeigeraum von 5h bilden eine übersichtliche x-Achse.
    Ich muss also irgendwie mit jedem hinzufügen einer Zeile (alle 10min per cronjob), gleichzeitig die erste Zeile löschen.
    Wie mach ich das ma besten? auch in meinem Pythonscript oder in einem neuen, welches extra diese aufgabe hat?

    Als großes Problem bleibt aber bestehen, dass sich meine Verlaufsgrafik nicht aktualliesiert, obwohl das dafür verantwortliche Script auch alle 10 Minuten die Temperaturen in die .txt schreibt. Kann mir jemad sagen woran das liegt?
    Wenn ich das skript manuell ausführe, wird die Grafik aktuallisiert

  • Zitat von crontab


    */10 * * * * /usr/bin/python /home/pi/temperatur.py

    Und die dazugehörige temperatur.py:


  • Ich muss also irgendwie mit jedem hinzufügen einer Zeile (alle 10min per cronjob), gleichzeitig die erste Zeile löschen.
    Wie mach ich das ma besten? auch in meinem Pythonscript oder in einem neuen, welches extra diese aufgabe hat?

    Würde es sich da nicht anbieten, die data samples in einer round robin data base, wie z.B. rrdtool zu speichern?
    Tools wie z.B. Munin, aber auch die diversen graphing plug-ins für monitoring server wie Nagios oder Icinga nutzen rrd files als backend für performance Daten.

    Zitat von eSmurf


    Als großes Problem bleibt aber bestehen, dass sich meine Verlaufsgrafik nicht aktualliesiert, obwohl das dafür verantwortliche Script auch alle 10 Minuten die Temperaturen in die .txt schreibt. Kann mir jemad sagen woran das liegt?
    Wenn ich das skript manuell ausführe, wird die Grafik aktuallisiert

    Ich hab's inzwischen schon vergessen, aber aktualisiert nicht ein plot Aufruf die Grafik?

    Die Gnuplot Skriptsprache scheint sogar Iteration, wie Du sie benötigst, dafür bereits zu berücksichtigen:


    Die Gnuplot-eigene Skriptsprache eignet sich schon so für fast jede andere Skript- oder Programmiersprache.
    Aber, wenn Du viel in Python codest und Dir diese Sprache sowieso mehr als Shell Skripte liegt,
    warum verwendest Du dann nicht gleich ein Python API für Gnuplot?
    Dann sparst Du Dir viele unsichere und ineffiziente Shell Forks z.B. via system() calls o.ä.
    Weil ich bisher noch nicht so sehr der Python Philosophie verschrieben bin, kenne ich mich da nicht so sehr aus,
    was es gibt und weiss auch nicht, ob das noch aktuell ist.
    Aber schau Dir doch mal z.B. dieses Gnuplot Python API an.

    • Offizieller Beitrag

    Zu Erklärung: os.system ist als veraltet markiert worden und soll durch subprocess ersetzt werden. Siehe hier Punkt 17.1.4.3.

    Gnuplot.py ist auf jedenfall einen versuch wert und allemal besser als dieses andauernde Sprachen gemixe (obwohl in dem Modul auch schon lange nichts mehr passiert ist ;) )

  • also den kompletten pfad zu gnuplot in den Aufruf zu schreiben hat leider auch nichts gebracht :(

    Wenn os.system veraltet ist, wie wende ich dann das neue an?

    Code
    # Python script beenden und GNUPLOT Grafik erstellen
    subprocess.call("/usr/bin/gnuplot /home/pi/temp.plt", shell=True)
    sys.exit(0)

    funktioniert nicht, da erhalte ich folgende Fehlermeldung:
    NameError: name 'subprocess' is not defined

    rrdtool wrde ich mir mal etwas genauer anschauen, jetzt muss ich leider erstmal für meine Abiklausur lernen... es dauert also wohl etwas bis ich dazu komme :/

    Zitat


    Ich hab's inzwischen schon vergessen, aber aktualisiert nicht ein plot Aufruf die Grafik?


    Ich dachte eigentlich diesen plotaufruf habe ich in meiner temp.plt?

    Zitat

    Aber, wenn Du viel in Python codest und Dir diese Sprache sowieso mehr als Shell Skripte liegt,
    warum verwendest Du dann nicht gleich ein Python API für Gnuplot?


    Naja eigentlich kenne ich mich mit Python auch nicht wirklich aus. Das tutorial zur Temeraturafrage hat sich auf dieses Script gestützt, von daher habe ich hier auch python verwendet.
    Eigentlich möchte ich hauptsächlich C lernen, aber auch um andere Sprachen werde ich nicht drum rum kommen. Also ist die Sprache ersteinmal nicht so wichtig. ;) Viel wichtiger finde ich erstmal, dass es funktioniert und das ich weiß wieso es das tut was es tut :)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!