Come faccio a impostare la struttura di dati per fare grafici a torta in GD :: Graph?

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

  •  21-09-2019
  •  | 
  •  

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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top