Come faccio a impostare la struttura di dati per fare grafici a torta in GD :: Graph?
Domanda
Sto Scrivendo uno script Perl per creare grafico a torta utilizzando GD :: Graph :: torta con questi array:
@Array1 = ("A", "B", "C", "D");
$array2 = [
['upto 100 values'],
['upto 100 values'],
['upto 100 values'],
['upto 100 values']
];
Come per la mia comprensione per ottenere questo fatto, devo creare un array con i riferimenti di array di cui sopra, come:
my @graph_data = (\@Array1, @$array2);
Inoltre ho cercato di usare ciclo foreach
ma non ottenendo buoni risultati. Voglio creare grafico a torta con il primo valore in @Array1
contro primo valore $array2
e secondo valore in @Array1
contro secondo valore in $array2
e così via. Anche io voglio mettere lo stesso titolo per ogni grafico come per i valori in @Array1
.
eg.
my @graph_data1 = (\@Array1[0], @$array2[0]);
Qualcuno può per favore mi suggerire il modo migliore per fare questo?
Soluzione 4
Ho trovato la soluzione di questo problema usando sotto il codice.
my @pairs = map{"$Array1[$_]@$array2[$_],"} 0..$#Array1;
Dopo questo i valori da @pairs di matrice può essere utilizzato per creare grafici.
Altri suggerimenti
Prima di entrare in grafici a torta e cose del genere, ti suggerisco di ottenere aggiornato sulle strutture dati Perl di base e riferimenti. Si prega di leggere perlreftut , youl dovrebbe essere in grado di risolvere questo problema da soli dopo.
Non sono sicuro di capire ciò che si sta cercando di fare, ma questo esempio produrrà 3 grafici a torta, tutti loro con lo stesso insieme di categorie. Vorrei secondo il consiglio di Manni: trascorrere del tempo con perlreftut e perldsc . Inoltre, se si scarica il GD :: Graph modulo , è fornisce molti esempi, tra cui grafici a torta (si veda la sottodirectory 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;
}
Per indicare nella più chiaro inglese quello che gli altri dicono risposte meno direttamente:
my @graph_data = (\Array1, $@array2);
my @graph_data1 = (\Array1[0], $@array2[0]);
sembra pazza. È quasi certamente dire:
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 è un array, si desidera un riferimento ad esso, e che sarebbe \ @ Array1.
$ array2 è un riferimento ad un array già. Esso contiene riferimenti a array, e presumo che si desidera una lista contenente il riferimento alla matrice all'indice 0. Quindi:. $ Array2 -> [0] è il primo elemento indicizzato tramite un riferimento ad array, ed è già un riferimento array