Comment puis-je configurer la structure de données pour faire des diagrammes circulaires dans GD :: Graph?

StackOverflow https://stackoverflow.com/questions/1393536

  •  21-09-2019
  •  | 
  •  

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?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top