Home > PHP > Werte als JPGraph Digramm darstellen

Werte als JPGraph Digramm darstellen

Historische Werte lassen sich zum Beispiel mit jpgraph als Diagramm darstellen.

Dazu benötigt man lediglich die jpgraph Lib und eine PHP-Datei, die das Bild generiert.

Hier ein Beispiel eines 48 Stunden Digramms für 2 Werte (Temperatur und Luftfeuchte):

<?php
# ————————————————-
# Datei: graph_48h.php
# benötigt: jpgraph Libs
# ————————————————-
# Beschreibung:
# Holt Werte aus einer Datenbank und generiert draus ein Diagramm mit jpgraph
# ————————————————-
# Autor: Christian Haeussler
# geändert am: 04.07.2008
# ————————————————-

// jpgraph Libs einbinden
require_once(“jpgraph/src/jpgraph.php”);
require_once(“jpgraph/src/jpgraph_line.php”);
require_once(“jpgraph/src/jpgraph_date.php”);

// Grafik definieren
$graph = new Graph(800,600,”auto”,60);
$graph->SetScale(“datlin”);
$graph->SetY2Scale(“lin”);

// Raender definieren
$graph->img->SetMargin(60,60,40,80);

// Datumsformat der Zeitachse einstellen
$graph->xaxis->scale->SetDateFormat(‘H:i’);

// Maximal und Minimalwert der Skala einstellen
$graph->xaxis->scale->SetTimeAlign(MINADJ_10);

// Label-Text Winkel um 90° drehen
$graph->xaxis->SetLabelAngle(90);

$sline = new PlotLine(HORIZONTAL,0,”black”,1);
$graph->Add($sline);

// Verbindung zu mySQL aufbauen, auswählen einer Datenbank
$link = mysql_connect(“localhost”, “user”, “passwort”);
mysql_select_db(“io”);

// ausführen der SQL Anfrage (288 Werte = 2 Tage * 24 h * 60 min / 10 min)
$query = “SELECT * FROM DB ORDER BY id DESC LIMIT 288″;
$result = mysql_query($query);

// Ausgabe der Ergebnisse in Array
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$times[] = $row["timestamp"];
$ydata1[] = $row["relf"];
$ydata2[] = $row["temp"];
}

// Freigeben des Resultsets
mysql_free_result($result);

// schliessen der mySQL Verbinung
mysql_close($link);

// Arrays umsortieren
$times = array_reverse($times);
$ydata1 = array_reverse($ydata1);
$ydata2 = array_reverse($ydata2);

// Die Zwei Linien generieren
$lineplot1 = new LinePlot($ydata1,$times);
$lineplot2 = new LinePlot($ydata2,$times);

// Legende definieren
$graph->legend->Pos(0.50,0.95,”center”,”top”);
$graph->legend->SetLayout(LEGEND_HOR);
$graph->legend->SetShadow(false);

// Titel für Legende
$lineplot1->SetLegend(“Luftfeuchte “);
$lineplot2->SetLegend(“Temperatur “);

$graph->xaxis->SetPos(“min”);
$graph->xgrid->Show(true,false);

// Titel und Beschriftung der Skalen
$graph->title->Set(“Verlauf der Daten”);
$graph->subtitle->Set(“über 48 Stunden”);
$graph->subtitle->SetColor(“darkred”);
$graph->xaxis->title->Set(“t”);
$graph->xaxis->SetTitleSide(SIDE_RIGHT);
$graph->yaxis->title->Set(“°C”);
$graph->yaxis->SetColor(“red”);
$graph->y2axis->title->Set(“%rH”);
$graph->y2axis->SetColor(“blue”);

// Schriftarten und Groesse festlegen
$graph->title->SetFont(FF_FONT2,FS_BOLD);
$graph->subtitle->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->y2axis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// Lienfarben und staerke definieren
$lineplot1->SetColor(“blue”);
$lineplot1->SetWeight(2);
$lineplot2->SetColor(“red”);
$lineplot2->SetWeight(2);

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

// Grafik anzeigen
$graph->Stroke();
?>

Dieses PHP-Skript wird dann ganz einfach in eine HTML-Seite als IMG-Tag
<img href=”graph_48h.php”>
mit eingebunden.

Das generierte Diagramm sieht dann z.B. so aus:

# -------------------------------------------------
# Datei: update.php
# benötigt: linknx.php
# -------------------------------------------------
# Beschreibung:
# Holt EIB-Werte und schreibt sie in eine Datenbank
# -------------------------------------------------
# Autor: Christian Haeussler
# geändert am: 17.02.2008
# -------------------------------------------------

Ähnliche Artikel:

  1. EIB-Werte sammeln
  2. AVR-Werte sammeln per PHP
  3. EIB-Visualisierung mit PHP
  4. EIB-Werte setzen und abfragen
  5. Ethernet Wetter Station

PHP ,


1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (4 Bewerter, Durchschnittlich: 4,75 von 5)
Loading ... Loading ...

  1. 15. September 2010, 19:39 | #1

    Kleiner Hinweis noch, ab MySQL Server 5 muß man den Timestamp umwandeln, da er in der Datenbank anders abgelegt wird.

    Benutzt dazu einfach anstatt
    $times[] = $row["timestamp"];
    folgenden Befehl:
    $times[] = strtotime($row["timestamp"]);

    Viele Grüße,
    Christian

  1. 11. Januar 2010, 21:40 | #1
  2. 11. Januar 2010, 21:48 | #2
  3. 25. Januar 2010, 23:47 | #3
  4. 26. Januar 2010, 00:02 | #4