Punktediagramm.pm


Anwendung

use Herbaer::Punktediagramm;

# "Welt"-Koordinaten
my $points  = [ [1, 2], [4, 8], [7, 9], [10, 7], [11, 8] ];

# Führungspunkte einer C-Bezier-Kurve in Weltkoordinaten
my $cbezier = [ [1, 2], [4, 7], [8, 7], [11, 6] ];

  my $pd = new Herbaer::Punktediagramm (3000, 2000, "Titel");
  $pd -> add_pointset ("Punktmenge", $points);
  $pd -> add_cbezier  ("Kurve",      $cbezier);
  $pd -> y_autorange ();
# $pd -> y_autorange_step (4);
  $pd -> x_autoticks ();
  $pd -> scale (100, 2950, 2900, 50);
  $pd -> write_xml ("diagramm.xml");
  

Funktionen

Alle Funktionen geben das Objekt selbst zurück.

new Herbaer::Punktediagramm ($width, $height, $title)

Erzeugt ein neues Objekt zur Ausgabe der Daten für ein Diagramm mit Punktmengen und Linien (C-Bezier-Kurven).

$width und $height sind die Breite und die Höhe des Diagramms, $title der optionale Titel.

$pd -> add_pointset ($name, $points);

Fügt dem Diagramm eine Menge von Punkten hinzu.

$name ist eine Bezeichnung, die der Punktmenge zugeordnet ist. $points ist eine ARRAY-Referenz der Form [ [x1, y1], [x2, y2], ....]. Die Koordinatenwerte sind „Weltkoordinatenwerte”.

$pd -> add_cbezier ($name, $cbezier);

Fügt dem Diagramm eine C-Bezier-Kurve hinzu.

$name ist eine Bezeichnung, die der Bezier-Kurve zugeordnet ist.

$cbezier ist eine ARRAY-Referenz der Führungspunkte der C-Bezier-Kurve in „Weltkoordinaten” der Form [ [x(1), y(1)], [x(2), y(2)], .... [x(3n+1), y(3n+1)] ].

$pd -> y_autorange ($min)

Bestimmt den y-Ausgabebereich, die Markierungen an der y-Achse und deren Beschriftungen.

$min ist die Mindestzahl der Intervalle, in die die Achsenmarkierungen den y-Ausgabebereich zerlegen. Der Default-Wert ist 7.

Der „Echtwertebereich” ist das Intervall zwischen dem kleinsten und dem größten y-Wert, der als y-Koordinate in einer Punktmenge oder als Führungspunkt einer C-Bezier-Kurve vorkommt. Als Schrittweite $step wird die größte Zahl bestimmt, die eine Zehnerpotenz oder das Doppelte oder das Fünffache einer Zehnerpotenz ist und deren $min-Faches nicht größer ist als die Länge des Echtwertebereichs. Dann wird die Funktion $pd -> y_autorange_step ($step) aufgerufen.

$pd -> y_autorange_step ($step)

Bestimmt den y-Ausgabebereich, die Markierungen an der y-Achse und deren Beschriftungen. $step muss eine positive Zahl sein.

Die untere Grenze des y-Ausgabebereichs ist das größte ganzzahlige Vielfache der Schrittweite $step, das nicht größer ist als der kleinste vorkommende y-Wert in einer Punktmenge oder der Liste der Führungspunkte einer C-Bezier-Kurve. Die obere Grenze des y-Ausgabebereichs ist das kleinste ganzzahlige Vielfache der Schrittweite $step, das nicht kleiner ist als der größte vorkommende y-Wert und größer als die untere Grenze des y-Ausgabebereichs ist.

Die y-Achse wird an den ganzzahligen Vielfachen der Schrittweite $step markiert, jede Markierung mit dem Zahlenwert beschriftet.

$pd -> x_autoticks ($min)

Bestimmt automatisch die Markierungen der x-Achse und deren Beschriftungen. $min ist eine positive ganze Zahl, der Default-Wert ist 7.

Der „Echtbereich” ist das Intervall zwischen dem größten und dem kleinsten x-Koordinatenwert, der in einem Punkt einer Punktmenge oder als Führungspunkt einer C-Bezier-Kurve vorkommt.

Die Schrittweite step ist die größte Zahl, die eine Zehnerpotenz oder das Doppelte oder das Fünffache einer Zehnerpotenz ist und deren $min-Faches nicht größer ist als die Länge des „Echtbereichs”.

Die x-Achse wird an den ganzzahligen Vielfachen von step markiert, die im halboffenen Intervall [xmin + step/2, xmax - step/2) liegen, zusätzlich am Endpunkt xmax. xmin und xmax stehen hier für die Grenzen des Echtbereichs.

Falls der Ausgabebereich noch nicht definiert ist, definieren der Echtwertebereich und der Echtbereich den Ausgabebereich.

$pd -> scale ($sxmin, $sxmax, $symin, $symax)

Diese Funktion berechnet die Bildkoordinaten der Punkte und Achsenmarkierungen.

Der Bildkoordinatenwert $sxmin entspricht der unteren Grenze des x-Ausgabebereichs, $sxmax der oberen Grenze des x-Ausgabebereichs, $symin der unteren Grenze des y-Ausgabebereichs und $symax der oberen Grenze des y-Ausgabebereichs.

Normalerweise steigen die y-Werte in einem Diagramm von unten nach oben, während die senkrechten Bildkoordinaten von oben nach unten steigen. Deshalb ist oft $symin größer als $symax.

Die Grenzen des x-Ausgabebereichs und des y-Ausgabebereichs dürfen nicht zusammenfallen.

$pd -> write_xml ($filepath)

Diese Funktion gibt die Daten zur Erstellung des Diagramms als XML-Datei aus. $filepath ist der Dateipfad der XML-Datei. Der XML-Namensraum ist http:herbaer.de/xmlns/20200803/punktediagramm/.

Die Transformation pd_svg.xslt erzeugt aus der Ausgabedatei eine SVG-Datei.

Beschreibung

Das Modul Herbaer::Punktediagramm ist zur Ausgabe der Daten für ein Diagramm gedacht. Nur die bisher nötigen Funktionen sind implementiert.

Software-Voraussetzungen

Das Programm ist mit Perl Version 5.24.1 entwickelt. Es benutzt das Modul Herbaer::XMLDataWriter zur Ausgabe.