Wie kann ich den plot ein zeitreihendiagramm mit Perl?
Habe ich einige Daten aus einer Datenbank (SQLite), mapping-ein Wert (eine Ganzzahl) zu einem Zeitpunkt. Ein date ist ein string mit folgendem format: YYYY-MM-DD hh:mm
. Die Daten sind nicht gleichmäßig verteilt. Ich will tun, ziehen Sie eine Linie Diagramm mit den Daten auf X
und die Werte, auf Y
. Was ist der einfachste Weg, dies zu tun mit Perl?
Versuchte ich DBIx::Chart aber ich konnte es nicht erkennen, meine Termine. Ich habe auch versucht GD::Graph, aber wie die Dokumentation sagt:
GD::Graph unterstützt nicht numerische x
Achse so wie es soll. Daten für X
Achsen sollten in gleichem Abstand
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fahren Sie gnuplot mit Chart::Gnuplot.
Alternativ, wenn SVG ist eine akzeptable Ausgabe-format, es ist SVG::TT::Graph.
Können Sie Chart::Clicker-Achse::DateTime:
Müssen Sie konvertieren Sie Ihre Zeiten in Unix-timestamps, aber es DWIMs.
format
- Methode mit einer beliebigen Formatierung string akzeptabel DateTime iststrftime
und wird es auch benutzen. Sie können die Anzahl und/oder die Positionen der Skalenstriche zu zeigen, mit derticks
odertick_values
Methoden aus Diagramm::Clicker:: - Achse.Haben Sie versucht, zu übersetzen, Ihre Termine auf einen Unix-Zeitstempel und verwenden Sie Sie als X-Termine?
Diese hat den trick für mich:
Der einfachste Weg, die ich gefunden habe, geht das mit Perl ist die Verwendung des Perl laufen einem gnuplot-Prozess. Sie können
set timefmt x "%Y-%m-%d"
und es wird automatisch Parsen der Daten in das format, das Sie haben. Gnuplot unterstützt auch eine Vielzahl von Ausgabeformaten.Ich würde empfehlen, die Normalisierung der Daten auf ganze zahlen. Die brute-force-Weg wäre natürlich über die Epoche Sekunden, aber das sieht vielleicht nicht allzu schön auf einem Graphen, so normalisieren durch eine lineare Transformation in eine anständige Auswahl (kann ich details dazu liefern, wie, wenn Sie möchten).
Müssen Sie Ihr Diagramm generiert werden in Echtzeit oder für einen Bericht? Wenn das letztere, dann können Sie DateTime-Module zu generieren, die Excel-Werte und Graphen Sie in Excel (oder dessen open-source-Gegenstück.)
Zeit habe ich so etwas mit Asymptote. Es ist ein unglaubliches Paket, aber es ist nicht einfach zu bedienen.
Den folgenden arbeiten nicht in SQLLite als rekursive Abfragen werden nicht unterstützt, aber es funktioniert in Oracle.
Können Sie erstellen eine kontinuierliche Zeitreihe für Oracle-dBs mit einer Unterabfrage wie diese:
Dann link das mal Serie auf das Diagramm von Daten mit einem LEFT JOIN wie diesem:
Obigen Beispiel wird der plot der letzten 60 Minuten und funktioniert** mit DBIx::Chart. Um die Auflösung zu ändern, um Stunden zu ändern, 'MI' zu 'HH24', oder für alle 24 Stunden kannst du weglassen, das Datum-format-parameter alle zusammen.
Um den Bereich zu ändern einfach die " CONNECT BY LEVEL-Wert, um die Anzahl der Zeitreihen Punkte, die Sie benötigen, um plot an Ihre angegebene Auflösung.
**Hinweis: DBIx::Chart-barf, wenn alle Datenpunkt-Werte null sind (dh. undefined). Kann dir nicht helfen, sorry.