[Perl] Legenda in GD Graph

Pagina: 1
Acties:

  • marcus22
  • Registratie: Juni 2001
  • Laatst online: 21-08 23:45
Ik ben nog steeds met de GD grafieken bezig (zie hier).

Nu is het probleem dat als ik een legenda in de grafiek laat zetten door GD::Graph, er geen goed plaatje meer uitkomt. Het lijkt wel alsof er twee plaatjes over elkaar getekend worden de de helf van de breedte of hoogte van het plaatje verschoven zijn. Dat hangt af van de plaatsing van de grafiek. Ik kan hier niet bij mijn webspace dus ik kan helaas geen voorbeeldje uploaden.

Ik heb al met de parameters van GD::Graph vanalles uitgeprobeerd qua kleuren en transparency en zo. Maar het probleem blijft.

Nu zag ik dat er een nieuwe versie uit is van de module (www.cpan.org). Zelf gebruik ik 1.39 maar 1.41 is nu ook uit. Ik kan hier (weer helaas) zelf geen nieuwe modules installeren. Mijn probleem staat niet in de changelog van de module dus ik denk dat dat het niet oplost.

Iemand een suggestie?

There is no place like 127.0.0.1


  • jvhaarst
  • Registratie: Maart 2000
  • Laatst online: 30-06 19:02

jvhaarst

Eendracht maakt macht

Geef eens een voorbeeld ?

If you don’t have enough time, stop watching TV.


  • marcus22
  • Registratie: Juni 2001
  • Laatst online: 21-08 23:45
Ok, toch een webFTP kunnen vinden.

Voorbeeld met de legenda rechts in het midden:

Afbeeldingslocatie: http://members.lycos.nl/rikenmark/graph.png

There is no place like 127.0.0.1


Verwijderd

btje code is misschien ook handig.....

  • marcus22
  • Registratie: Juni 2001
  • Laatst online: 21-08 23:45
Standaard code lijkt me: (ik ben wel een Perl newbie)

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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#! /usr/bin/perl

use CGI qw(:standard);

#Use the DataBase Interface module
use DBI;

#Get data from GET
$my_data = $ENV{'QUERY_STRING'};

#Split query string on "&"
@name_value_array = split(/&/, $my_data);

# Cycle through @name_value_array to decode the name=value pairs
(...)

   #Use the GD library to draw the PNG images
   use GD::Graph::bars;
   $print_vertical = 1;

use GD;

#Set database connection variables
(...)

#Get database handler
(..)

#Compile SQL query string to get the data
(...)

#Prepare statement
$sth = $dbh->prepare($str_sql);

#Execute statement
$sth->execute;

#Start at the beginning of the two dimensional array
$counter = 0;

#Check for the maximum value
$max = 0;

#Get the row data
while(@row = $sth->fetchrow_array){
   #Compile datavalues array
   $data[0][$counter] = $row[4];
   if ($row[0] >= 0) {$data[1][$counter] =  $row[0];} 
   else {$data[1][$counter] = 0;}
   if ($row[1] >= 0) {$data[2][$counter] = ($row[1] - $row[0]);} 
   else {$data[2][$counter] = 0;}
   if ($row[2] >= 0) {$data[3][$counter] = ($row[2] - $row[1]);} 
   else {$data[3][$counter] = 0;}
   if ($row[3] >= 0) {$data[4][$counter] = ($row[3] - $row[2]);} 
   else {$data[4][$counter] = 0;}

   $counter++;
}

#Close database handler and connection
$sth->finish;
$dbh->disconnect;

$legend_keys[0] = 'First image';
$legend_keys[1] = 'Legal disclaimer';
$legend_keys[2] = 'Menu visible';
$legend_keys[3] = 'Menu operable';

#Get a new graph image
$my_graph = GD::Graph::bars->new(400,500);

#Set graph options
$my_graph->set( 
  x_label         => 'System on',
  y_label         => 'Time (sec)',
  title           => 'Benchmark navigation Test results',
  y_tick_number   => 10,
  dclrs           => [qw(purple blue green yellow)],
  borderclrs      => [qw(black black)] ,
  cumulate        => 1,
  bar_spacing     => 8,
  transparent     => 0,
  legend_placement=> RC,
);

$my_graph->set_legend(@legend_keys);

$my_graph->set(y_max_value => 120);

$my_graph->set(x_labels_vertical => 1);

#Plot the actual graph
my $gd = $my_graph->plot(\@data);

#Sent PNG image to output
print header ("image/png");
binmode STDOUT;
print $my_graph->plot(\@data)->png();

There is no place like 127.0.0.1


Verwijderd

Roep je niet per abuis twee keer de legenda aan?

  • marcus22
  • Registratie: Juni 2001
  • Laatst online: 21-08 23:45
Volgens mij niet maar misschien vergis ik me? In welke regel(s) staat dat dan?

There is no place like 127.0.0.1


  • marcus22
  • Registratie: Juni 2001
  • Laatst online: 21-08 23:45
Na nog een halve dag proberen krijg ik er nog steeds geen fatsoenlijke legenda uit.

Op het internet heb ik wel enkele voorbeeldjes kunnen vinden van juiste legenda's maar die zijn allemaal met de nieuwe versie gemaakt dus ik denk dat ik ga proberen om die te gaan gebruiken. Raar dat het niet in de changelog staat.

There is no place like 127.0.0.1


  • marcus22
  • Registratie: Juni 2001
  • Laatst online: 21-08 23:45
De nieuwe versie (1.42) helpt helaas ook niet. Ik denk dat ik echt iets fout doe in de code (zie boven). :'(

Het maakt ook niet uit waar ik de legend neerzet (onder, rechts etc) of hoe ik aan de data kom (vaste getallen of DB).

edit:

Ook heb ik in de source gekeken en op CPAN gezocht maar ik kan er maar heel weinig over vinden.

[ Voor 22% gewijzigd door marcus22 op 25-06-2003 09:25 ]

There is no place like 127.0.0.1


  • Red Sonja
  • Registratie: Juli 2001
  • Laatst online: 01-07 13:16

Red Sonja

Linux: power to de wortel

Mss dat je query dubbele data opvraagt 8)7

And the beast shall be made legion. Its numbers shall be increased a thousand thousand fold. The din of a million keyboards like unto a great storm shall cover the earth, and the followers of Mammon shall tremble. from The Book of Mozilla, 3:31


  • marcus22
  • Registratie: Juni 2001
  • Laatst online: 21-08 23:45
Dat is het niet. De query heb ik uitgebreid getest.

Een collega wees me net wel op het feit dat ik de grafiek twee keer laat plotten, een keer met en een keer zonder legenda! Dat was het dus. En ik dacht dat dat statement nodig was voor iets (Perl newbie).

There is no place like 127.0.0.1

Pagina: 1