Comment puis-je configurer la structure de données pour faire des diagrammes circulaires dans GD :: Graph?
Question
Je suis ecrivais un script Perl pour créer graphique circulaire en utilisant GD :: Graph :: tarte avec ces tableaux:
@Array1 = ("A", "B", "C", "D");
$array2 = [
['upto 100 values'],
['upto 100 values'],
['upto 100 values'],
['upto 100 values']
];
Selon ma compréhension pour y parvenir, je dois créer un tableau avec les références des tableaux ci-dessus, comme:
my @graph_data = (\@Array1, @$array2);
J'ai aussi essayé d'utiliser la boucle de foreach
mais pas obtenir de bons résultats. Je veux créer le graphique à tarte avec la première valeur @Array1
contre première valeur $array2
et la deuxième valeur @Array1
contre la deuxième valeur $array2
et ainsi de suite. Aussi je veux mettre le même titre pour chaque graphique selon les valeurs en @Array1
.
eg.
my @graph_data1 = (\@Array1[0], @$array2[0]);
Quelqu'un peut-il s'il vous plaît me suggérer la meilleure façon de le faire?
La solution 4
J'ai trouvé la solution de ce problème en utilisant le code ci-dessous.
my @pairs = map{"$Array1[$_]@$array2[$_],"} 0..$#Array1;
Après cela, les valeurs de @pairs du tableau peut être utilisé pour créer des graphiques.
Autres conseils
Avant d'entrer dans camemberts et des trucs comme ça, je vous suggère de vous obtenir mis à jour sur les structures de données Perl de base et des références. S'il vous plaît lire perlreftut , Youl devrait être en mesure de résoudre ce problème vous-même par la suite.
Je ne suis pas sûr que je comprends ce que vous essayez de faire, mais cet exemple produira 3 camemberts, tous en utilisant le même ensemble de catégories. Je deuxième conseil de Manni: passer du temps avec perlreftut et perldsc . En outre, si vous téléchargez le module GD :: Graph , il fournit de nombreux exemples, y compris des graphiques circulaires (voir le sous-répertoire samples
).
use strict;
use warnings;
use GD::Graph::pie;
my @categories = qw(foo bar fubb buzz);
my @data = (
[ 25, 32, 10, 44 ], # Data values for chart #1
[ 123, 221, 110, 142 ], # Data values for chart #2
[ 225, 252, 217, 264 ], # etc.
);
for my $i (0 .. $#data){
my $chart = GD::Graph::pie->new;
my @pie_data = ( \@categories, $data[$i] );
$chart->plot(\@pie_data);
open(my $fh, '>', "pie_chart_$i.gif") or die $!;
binmode $fh;
print $fh $chart->gd->gif;
close $fh;
}
Pour dire en anglais ce que les autres plus clair réponses disent moins directement:
my @graph_data = (\Array1, $@array2);
my @graph_data1 = (\Array1[0], $@array2[0]);
regarde fou. Vous voulez dire que presque certainement:
my @graph_data = (\@Array1, $array2);
# you want the first element of each list in the same datastructure?
my @graph_data1 = ([$Array1[0]], [$array2->[0]]); # (['A'], [[..numbers..]])
# Note *two* [ and ] in 2nd bit
# ... or you want a different datastructure?
my @graph_data1 = ($Array1[0], $array2->[0]); # ('A', [..numbers..])
@ Array1 est un tableau, vous voulez une référence à elle, et ce serait \ @ Array1.
array2 $ est une référence à un tableau déjà. Il contient des références à des tableaux, et je suppose que vous voulez une liste contenant la référence au tableau à l'index 0. Ainsi:. Array2 $ -> [0] est le premier élément indexé par une référence de tableau, et il est déjà une référence de tableau