Ankündigung

Einklappen
Keine Ankündigung bisher.

Zu lange X-Achse bei jpgraph

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Zu lange X-Achse bei jpgraph

    Hallo an alle!

    Ich suche jetzt seit mehreren Stunden warum mein jpgraph eine zu lange X-Achse hat. Die Beschreibung der Klassen aus der Dokumentation hat mir leider nicht weiter geholfen. Hat hier vielleicht jemand eine Idee?

    Hier die Einzelheiten:

    Ich habe eine MySQL-Datenbank, in der jede Minute eine Temperatur von einem Sensor und der UNIX Time-Stamp gespeichert wird. Aus dieser Datenbank lese ich die letzten 1440 Zeilen (entspricht 24 Stunden) in zwei Arrays aus . Eines beinhaltet die Temperatur und eines den UNIX Time-Stamp. Diese ordne ich dann der X- und Y-Achse zu, wobei die X-Achse der Zeit zugeordnet wird. In der erzeugten Grafik ist die X-Achse danach immer um eine Stunde zu lang. Warum ist die X-Achse länger als der Graph?

    Hier der Code:
    PHP-Code:
    <?php
    include ("/usr/share/jpgraph3/jpgraph.php");
    include (
    "/usr/share/jpgraph3/jpgraph_line.php");
    include (
    "/usr/share/jpgraph3/jpgraph_mgraph.php");
    include (
    "/usr/share/jpgraph3/jpgraph_date.php");

    $DatabaseHost "localhost";
    $DatabaseUser "datenbankuser";
    $DatabasePassword "datenbankpasswort";
    $Database "datenbankname";
    $Table "tabellenname";

    $fileName "/var/www/grafiken/graph.png";

    //Datenbankanbindung
    //******************
    $DatabasePointer mysql_connect($DatabaseHost$DatabaseUser$DatabasePassword) or die ("Keine Verbindung moeglich");
    mysql_select_db($Database$DatabasePointer) or die ("Die Datenbank existiert nicht");


    //Auslesen der letzten 1440 Zeilen (= Tag) aus der Datenbank
    //**********************************************************
    $ResultPointer mysql_query("SELECT * FROM $Table ORDER BY UnixTimeStamp DESC LIMIT 1440");


    for(
    $i 0$Export ""$i mysql_num_rows($ResultPointer); $i++)
    {
       
    $Daten mysql_fetch_object($ResultPointer);

       
    $temp[] = $Daten->temp_clara;
       
    $xdata[] = $Daten->UnixTimeStamp;
    }

    //Erzeugung eines Graphen 
    //******************************************
    $graph = new Graph(700,200,"auto");
    $graph->SetScale('datint',"auto","auto","auto","auto");
    $lineplot_temp=new LinePlot($temp$xdata);

    // Grafik Formatieren
    $graph->img->SetMargin(50,50,20,60);
    $graph->SetColor("#000000");
    $graph->SetMarginColor("#333333");
    $graph->SetShadow();

    //Linie 1
    $lineplot_temp->SetColor("#FF8888");
    $lineplot_temp->SetFillColor("#EE0000@0.6");
    $lineplot_temp->SetWeight(1);

    // Die Linien zu der Grafik hinzufügen
    $graph->Add($lineplot_temp);


    $graph->Stroke($fileName);

    ?>
    Hier noch mal zwei Bilder in denen ich das Problem mit einem weißen Kreuz markiert habe:
    Angehängte Dateien


  • #2
    Zitat von kripu Beitrag anzeigen
    In der erzeugten Grafik ist die X-Achse danach immer um eine Stunde zu lang. Warum ist die X-Achse länger als der Graph?
    Es wäre schön, wenn du das nächste Mal den Code auf's wesentliche kürzen würdest. Dass der Datenbank-Krempel etwas damit zu tun haben könnte, wirst du ja wohl schon im Vorfeld ausgeschlossen haben - also interessiert der hier nicht weiter.


    Und bei „immer um eine Stunde zu lang“ würde ich als erstes spontan darauf tippen, dass es sich um irgendeine Art von Zeitzonen-Problematik handelt. Schliesslich sind wir hier in Deutschland bei UTC+1h, so dass da durchaus ein Zusammenhang bestehen könnte.

    Kommentar


    • #3
      Es wäre schön, wenn du das nächste Mal den Code auf's wesentliche kürzen würdest.
      Klar das mit dem Code für die Datenbankanbindung werde ich nächstes mal anders machen. Ich wollte nur ein lauffähigen Code einstellen. Deshalb hatte ich die Routine mitgenommen. Den meisten Code hatte ich bereits weg gekürzt.

      bei „immer um eine Stunde zu lang“ würde ich als erstes spontan darauf tippen, dass es sich um irgendeine Art von Zeitzonen-Problematik handelt
      Da ich auf der X-Achse die Unixzeit (Sekunden seit dem 1. Januar 1970 00:00 Uhr UTC) verwende, glaube ich nicht das es mit Zeitzonen oder der Zeitumstellung zusammen hängt. Des weiteren ist es so, dass die "leere" Stunde immer am Anfang einer Stunde auf der rechten Seite ist. Im Laufe der Stunde wandert der Graph dann auf die rechte Seite rüber. jpgraph scheint auf der X-Achse also unbedingt die Stunden immer voll bekommen zu wollen. Die Frage ist also: Wie gewöhnt man jgraph das ab?

      Kommentar


      • #4
        Zitat von kripu Beitrag anzeigen
        Die Frage ist also: Wie gewöhnt man jgraph das ab?
        Hättest du die Dokumentation gelesen bzw deinen Code verstanden, wüsstest du was folgende Zeile macht:
        PHP-Code:
        $graph->SetScale('datint',"auto","auto","auto","auto"); 
        Dort hast du jpGraph gebeten die Achsenlängen zu berechnen, wobei für eine bessere Darstellung immer gerundet wird. Du kennst die minimalen und maximalen Werte für die Achsen bzw kannst sie berechnen, sodass du diese dann auch selbst festlagen kannst und das Problem sollte behoben sein!

        Kommentar


        • #5
          Dort hast du jpGraph gebeten die Achsenlängen zu berechnen, wobei für eine bessere Darstellung immer gerundet wird. Du kennst die minimalen und maximalen Werte für die Achsen bzw kannst sie berechnen, sodass du diese dann auch selbst festlagen kannst und das Problem sollte behoben sein!
          Das hatte ich auch erst so verstanden. Allerdings ändert sich nichts, wenn man statt auto $xdata[0] bzw $xdata[1439] einträgt. Auch wenn man von Hand die richtigen Unixzeiten aus der Datenbank einträgt ändert sich nichts. Ich habe auch schon an diversen anderen Tick bzw. Scale Parametern für xaxis gedreht, die ich im Handbuch gefunden habe. Bist jetzt alles ohne Erfolg. Lediglich das ändern der Datentypen bei SetScale von "datint" auf z.B. "linint" verändert das runden ein wenig. Es behebt das Problem aber nicht.

          Kommentar


          • #6
            Hallo,

            also ich hab das selbe Problem und hab dazu schon einiges rausgefunden.

            Das Problem entsteht durch das verwenden der jpgraph_date Datei. In dieser werden die Start und End Werte neu berechnet.
            Und hier auch das Problem, ich hab auch nach mehreren Versuchen es noch nicht geschafft die Funktion für die Auto Scalierung abzuschalten ohne das es mir einen Fehler anzeigt. Vieleicht kennt sich ja jemand damit besser aus und weiß wie man die Funktionen entfernen kann ohne dass es zu Fehlermeldungen kommt.

            MfG Willy

            Edit: Hab die Lösung Gefunden: man muss in der jpgraph Datei folgende Werte ändern:

            in Zeile 488
            $this->Update($img,$adjstart,$adjend);
            ändern in:
            $this->Update($img,$aStartTime,$aEndTime);
            dadurch wird sowohl am Anfang als auch am Ende die Auto Anpassung abgeschaltet.

            Kommentar

            Lädt...
            X