[Algemeen || Perl] Grafiekjes maken

Pagina: 1
Acties:

  • Juup
  • Registratie: Februari 2000
  • Niet online
Wat is de beste manier om grafieken te maken?
- gnuplot
- rrdtool
- GD::Graph
Of iets anders? Ik gebruik nu rrdtool maar die kent op de x as alleen tijd als variabele (en dan ook nog in seconden vanaf 1970). Gnuplot maakt niet echt mooie plaatjes en GD krijg ik niet aan de gang.

Heeft iemand een fijne methode (eigen module)?

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • Juup
  • Registratie: Februari 2000
  • Niet online
Hmmmm... kan natuurlijk ook naar SVG wegschrijven. Scheelt een hoop bytes. Iemand ervaring mee?

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


Verwijderd

GD::Graph is aardig simpel, standaard en werkt ook erg goed.

rddtool is zover ik nu hep gezien v/d commandline :(

gnuplot is helemaal uitgebreid (check de manual is: http://www.comnets.rwth-aachen.de/doc/gnu/gnuplot37/gnuplot.html )

  • zoepercavia
  • Registratie: September 2001
  • Laatst online: 26-12-2025
SVG (http://www.w3.org/TR/SVG/) gaat heel erg hard roelen, zit eigenlijk te wachten op officiele support van IE en Mozilla.
Als je alleen intern grafiekjes wilt bouwen (voor stats of iets dergelijks), dan is het zeker aan te raden om dat je dan gwoon voor alle gebruikers de Adobe Viewer kan installeren

Panacea.NL als je geinteresserd bent in IT en Geneeskunde!


  • Juup
  • Registratie: Februari 2000
  • Niet online
Op donderdag 13 juni 2002 08:10 schreef zoepercavia het volgende:
SVG (http://www.w3.org/TR/SVG/) gaat heel erg hard roelen, zit eigenlijk te wachten op officiele support van IE en Mozilla.
Als je alleen intern grafiekjes wilt bouwen (voor stats of iets dergelijks), dan is het zeker aan te raden om dat je dan gwoon voor alle gebruikers de Adobe Viewer kan installeren
Die viewer is al op alle windows bakken geinstalleerd. Alleen voor andere OSsen werkt dat nog niet. Zou mozilla niet al lang SVG support moeten hebben?

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • tomato
  • Registratie: November 1999
  • Niet online
Jaaap: Die viewer is al op alle windows bakken geinstalleerd. Alleen voor andere OSsen werkt dat nog niet. Zou mozilla niet al lang SVG support moeten hebben?
http://www.mozilla.org/projects/svg/

SVG is heel erg :9~

Ik heb verder geen ervaring met grafische libs zoals je ze noemt, dus daar kan ik niet veel over zeggen.

  • Juup
  • Registratie: Februari 2000
  • Niet online
Zal ik hier voor de lol m'n primitieve brouwsel om een array met x waarden en een array met y waarden te converteren naar SVG eens posten? Is highly alpha.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#!/opt/Perl5.6.0/bin/perl -Tw

use strict;

my @x = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
my @y = (4, 2, 1, 5, 8, 8, 9, 5, 4, 10);

sub createSVGGraph()
{
  my $width = 600;
  my $height = 400;
  my $cornerDistance = 50;
  my $vertTranslate = $height - $cornerDistance;
  my $gridWidth = $width - 2 * $cornerDistance;
  my $gridHeight = $height - 2 * $cornerDistance;
  my $horiGridDistance = 10;
  my $horiGridLines = $gridHeight / $horiGridDistance + 1;
  my $vertiGridDistance = 10;
  my $vertiGridLines = $gridWidth / $vertiGridDistance + 1;
  my $maxX = 0;
  my $maxY = 0;
  foreach (@x)
  {
    if ($_ > $maxX)
    {
    $maxX = $_;
    }
  }
  foreach (@y)
  {
    if ($_ > $maxY)
    {
    $maxY = $_;
    }
  }
  my $horiUnitDistance = $gridWidth / $maxX;
  my $vertiUnitDistance = $gridHeight / $maxY;
  print <<"  EOF";
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20000303 Stylable//EN" "http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-stylable.dtd" >
<svg width="$width" height="$height">
<g id="grid" transform="translate($cornerDistance, $vertTranslate)">
  EOF
  ### make grid
  for (my $horiGridLineNumber = 0; $horiGridLineNumber < $horiGridLines; $horiGridLineNumber++)
  {
    my $lineY = -1 * $horiGridLineNumber * $horiGridDistance;
    print "<line x1=\"0\" y1=\"$lineY\" x2=\"$gridWidth\" y2=\"$lineY\"/>\n";
  }
  for (my $vertiGridLineNumber = 0; $vertiGridLineNumber < $vertiGridLines; $vertiGridLineNumber++)
  {
    my $lineX = $vertiGridLineNumber * $vertiGridDistance;
    print "<line x1=\"$lineX\" y1=\"0\" x2=\"$lineX\" y2=\"" . (-1 * $gridHeight) . "\"/>\n";
  }
  ### make axes
  print "<path d=\"M0,0H-5 0 V 5 " . (-1 * $gridHeight) . " h -5 10 -5 V 0H" . $gridWidth . " V 5 -5 0 H 0\" style=\"fill:none;stroke:black\"/>";
  ### print measurepoints (dots) (data)
  for (my $dotNumber = 0; $dotNumber < @x; $dotNumber++)
  {
    my $dotX = $horiUnitDistance * $x[$dotNumber];
    my $dotY = -1 * $vertiUnitDistance * $y[$dotNumber];
    print "<circle cx=\"$dotX\" cy=\"$dotY\" r=\"3\"/>";
  }
  print "</g>\n</svg>\n";
}

print "Content-type: image/svg-xml\n\n";
&createSVGGraph();

Nog niet echt flexibel enzo... :)

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.

Pagina: 1