The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Quiq::Gd::Component::Graph - Polyline-Graph

BASE CLASS

Quiq::Gd::Component

DESCRIPTION

Das Objekt repräsentiert einen Graph entlang der Weltkoordinaten @x und @y. Per Default wird der Graph über der gesamten Fläche des Bildes gezeichnet. Durch die Angabe colors=>\@colors kann als dritte Dimension ein Farbwert entlang des Graphen gezeichnet werden. Punkte und Linien werden in diesen Farben gezeichnet, sofern per (pointColor) oder (lineColor) nichts anderes vorgegeben ist.

ATTRIBUTES

Fett hervorgehobene Attribute sind Pflichtangaben beim Konstruktor-Aufruf.

width => $int (Default: keiner)

Breite der Grafik in Pixeln.

height => $int (Default: keiner)

Höhe der Grafik in Pixeln.

x => \@x (Default: [])

Array der X-Werte (Weltkoordinate).

y => \@y (Default: [])

Array der Y-Werte (Weltkoordinate).

colors => \@colors (Default: undef)

Farben der Datenpunkte und Linien. Jeder Datenpunkt und jede Verbindungslinie hat eine eigene Farbe. Siehe Beispiel Graph mit verschiedenfarbigen Datenpunkten und Linien.

lineColor => $color (Default: Defaultfarbe)

Farbe der Verbindungslinien. FIMXE: Verhältnis zu Attribut colors beschreiben.

lineThickness => $n (Default: 1)

Dicke der Verbindungsline in Pixeln. Wenn 0, wird keine Linie gezeichnet.

xMin => $f (Default: Minimum der X-Werte)

Anfang des X-Wertebereichs (Weltkoodinate).

xMax => $f (Default: Maximum der X-Werte)

Ende des X-Wertebereichs (Weltkoodinate).

yMin => $f (Default: Minimum der Y-Werte)

Anfang des Y-Wertebereichs (Weltkoodinate).

yMax => $f (Default: Maximum der Y-Werte)

Ende des Y-Wertebereichs (Weltkoodinate).

xMaxDelta => $f (Default: undef)

Maximaler Abstand zwischen zwei benachbarten Punkten in X-Richtung. Wird dieser Abstand überschritten, werden die Punkte nicht durch eine Linie verbunden.

yMaxDelta => $f (Default: undef)

Wie xMaxDelta, nur in Y-Richtung.

pointColor => $color (Default: Defaultfarbe)

Farbe, in der alle Datenpunkte gezeichnet werden.

pointSize => $n (Default: 1)

Größe des Punktes in Pixeln. Der Punkt wird gemäß pointStyle dargestellt. Der Wert sollte ungerade sein: 1, 3, 5, usw., damit die Darstellung mittig über dem Datenpunkt stattfindet.

pointStyle => $style (Default: 'square')

Darstellung des Punktes: 'square', 'circle'.

adaptPlotRegion => $bool (Default: 0)

Ist die Punktgröße > 1 (s. Attribut pointSize), erweitere den Plotbereich (Attribute xMin, xMax, yMin, yMax) derart, dass die Datenpunkte auch am Rand vollständig gezeichnet werden.

EXAMPLES

Einfacher Graph

Code:

  require Quiq::Gd::Image;
  require Quiq::Gd::Component::Graph;
  
  my ($width,$height) = (500,100);
  
  $img = Quiq::Gd::Image->new($width,$height);
  $img->background('#ffffff');
  my $g = Quiq::Gd::Component::Graph->new(
      width=>$width,
      height=>$height,
      x=>[0, 1, 2,   3, 4,   5, 6, 7,   8,   9],
      y=>[0, 9, 7.5, 1, 1.9, 6, 4, 6.3, 0.5, 10],
  );
  $g->render($img);

Im Browser:

    [Nur im Browser sichtbar]

Graph mit gekennzeichneten Datenpunkten

Code:

  require Quiq::Gd::Image;
  require Quiq::Gd::Component::Graph;
  
  my ($width,$height) = (500,100);
  
  $img = Quiq::Gd::Image->new($width,$height);
  $img->background('#ffffff');
  $img->border('#d0d0d0');
  
  my $g = Quiq::Gd::Component::Graph->new(
      width=>$width,
      height=>$height,
      x=>[0, 1, 2,   3, 4,   5, 6, 7,   8,   9],
      y=>[0, 9, 7.5, 1, 1.9, 6, 4, 6.3, 0.5, 10],
      pointColor=>'#ff0000',
      pointSize=>5,
  );
  $g->render($img);

Im Browser:

    [Nur im Browser sichtbar]

Wir setzen die Punktfarbe und die Punktgröße. Die Endpunkte sind abgeschnitten, da ein Teil von ihnen außerhalb des Bildes liegt.

Graph mit verschiedenfarbigen Datenpunkten und Linien

Code:

  require Quiq::Gd::Image;
  require Quiq::Gd::Component::Graph;
  
  my ($width,$height) = (504,104);
  
  $img = Quiq::Gd::Image->new($width,$height);
  $img->background('#ffffff');
  $img->border('#d0d0d0');
  
  my $g = Quiq::Gd::Component::Graph->new(
      width=>$width-4,
      height=>$height-4,
      x=>[0, 1, 2,   3, 4,   5, 6, 7,   8,   9],
      y=>[0, 9, 7.5, 1, 1.9, 6, 4, 6.3, 0.5, 10],
      colors=>[
          '#ff0000',
          '#00ff00',
          '#0000ff',
          '#ffff00',
          '#ff00ff',
          '#00ffff',
          '#000000',
          '#808000',
          '#800080',
          '#008080',
      ],
      pointSize=>5,
  );
  $g->render($img,2,2);

Im Browser:

    [Nur im Browser sichtbar]

Wenn Eigenschaft colors definiert ist, werden die Punkte und Verbindungslinien in den angegebenen Farben dargestellt. Die Linie hat die Farbe des Anfangspunktes, der letzte Punkt hat keine Verbindungsline. Mit pointColor oder lineColor kann die Punkt- oder Linienfarbe auf eine bestimmte Farbe festgelegt werden (beide im Falle von colors fix einzustellen, macht wenig Sinn, denn dann hat colors keinen Effekt mehr). Die Endpunkte sind hier im Gegensatz zum vorigen Beispiel vollständig dargestellt, da wir das Bild um 4 Pixel breiter und höher gemacht haben als den Plotbereich.

Größe Plotregion anpassen mit adaptPlotRegion

Code:

  require Quiq::Gd::Image;
  require Quiq::Gd::Component::Graph;
  
  my ($width,$height) = (504,104);
  
  $img = Quiq::Gd::Image->new($width,$height);
  $img->background('#ffffff');
  $img->border('#d0d0d0');
  
  my $g = Quiq::Gd::Component::Graph->new(
      width=>$width,
      height=>$height,
      pointSize=>5,
      adaptPlotRegion=>1,
      x=>[0, 1, 2,   3, 4,   5, 6, 7,   8,   9],
      y=>[0, 9, 7.5, 1, 1.9, 6, 4, 6.3, 0.5, 10],
      colors=>[
          '#ff0000',
          '#00ff00',
          '#0000ff',
          '#ffff00',
          '#ff00ff',
          '#00ffff',
          '#000000',
          '#808000',
          '#800080',
          '#008080',
      ],
  );
  $g->render($img);

Im Browser:

    [Nur im Browser sichtbar]

Mit adaptPlotRegion wird der Plotbereich so verkleinert, dass Punkte am Rand vollständig sichtbar sind.

METHODS

Konstruktor

new() - Konstruktor

Synopsis

  $g = $class->new(@keyVal);

Description

Instantiiere ein Grafik-Objekt mit den Eigenschaften @keyVal (s. Abschnitt ATTRIBUTES) und liefere eine Referenz auf das Objekt zurück.

Zeichnen

render() - Zeichne Grafik

Synopsis

  $g->render($img);
  $g->render($img,$x,$y,@keyVal);
  $class->render($img,$x,$y,@keyVal);

Description

Zeichne die Grafik in Bild $img an Position ($x,$y). Die Methode liefert keinen Wert zurück.

Objektmethoden

xMin() - Minimum des X-Wertebereichs

Synopsis

  $xMin = $g->xMin;

Description

Liefere das Minimum des X-Wertebereichs, das entweder beim Konstruktoraufruf gesetzt oder aus den Daten ermittelt wurde.

xMax() - Maximum des X-Wertebereichs

Synopsis

  $xMax = $g->xMax;

Description

Liefere das Maximum des X-Wertebereichs, das entweder beim Konstruktoraufruf gesetzt oder aus den Daten ermittelt wurde.

yMin() - Minimum des X-Wertebereichs

Synopsis

  $yMin = $g->yMin;

Description

Liefere das Minimum des Y-Wertebereichs, das entweder beim Konstruktoraufruf gesetzt oder aus den Daten ermittelt wurde.

yMax() - Maximum des Y-Wertebereichs

Synopsis

  $yMax = $g->yMax;

Description

Liefere das Maximum des Y-Wertebereichs, das entweder beim Konstruktoraufruf gesetzt oder aus den Daten ermittelt wurde.

VERSION

1.186

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2020 Frank Seitz

LICENSE

This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.