Autoscaling grafico a barre
salve, sto scribacchiando un programmino in java per studiare le dimensioni dei files contenuti in una directory, id est, quanti file ci sono tra 0 et 1 Mb, quanti tra 1 Mb et 2 Mb, etc. Poi ho pensato di rappresentare i risultati in un grafico a barre mettendo sull'asse x la dimensione del file con scala di 1Mb, sull'asse y il numero di files, però mi sono accorto che è più rappresentativo un grafico con intervalli di dimensioni più grandi in maniera da avere un numero significativo di file in ogni barra. Se regolare la dimensione degli intervalli manualmente è relativamente semplice, " si procede a occhio", come posso implementare tale funzione in un programma?
Risposte
Bhe, ma se hai un array che contiene i valori per ogni MB (immagino che tu intendessi megabyte e non megabit) è sufficiente sommare un certo numero di valori nel tuo array per avere il valore da visualizzare nel grafico. Se ad esempio vuoi che ogni barra corrisponda ad un intervallo di 10MB è sufficiente sommare 10 valori insieme.
Ok, ho posto in maniera non particolarmente chiara la domanda: è ovvio che se voglio un il numero di file con dimensioni compresi tra due valori defiiniti a et b sommi i valori delle barre che si trovino tra a et b; quello che cerco è un criterio traducibile in codice per il computer per trovare una dimensione opportuna dell'intervallo, in altre parole la scala da applicare all'asse x, in maniera da avere un numero significativo di file in ogni barra (un grafico con barre con un file o senza barre in ampi intervalli dell'asse x non sono "ben fatti".
Immaginiamo che tu possa dividere l'asse Y in 10 parti.
In base al valore massimo delle x, farei la divisione per 10, e rapporterei tutti i valori alla scala.
se ad esempio, ho i valori:
50, 80, 10, 150, 100, 60 etc etc....
il piu alto è 150, e quindi ogni segmento dei 10 suddivisi rappresenta 15 unita'.
Il 50 sara' alto 3,3 segmenti, il 60 alto 4, il 150 alto 10.
In base al valore massimo delle x, farei la divisione per 10, e rapporterei tutti i valori alla scala.
se ad esempio, ho i valori:
50, 80, 10, 150, 100, 60 etc etc....
il piu alto è 150, e quindi ogni segmento dei 10 suddivisi rappresenta 15 unita'.
Il 50 sara' alto 3,3 segmenti, il 60 alto 4, il 150 alto 10.
Scusa ma non capisco...i valori della serie, non necessariamente tutti distinti tra loro stanno sull'asse x, mentre sull'asse y ci sono le frequenze con le quali tali valori appaiono nella serie.
Quindi per esempio considerando la serie che tu poni come esempio, con lo spazio di un carattere che vale 10 sull'asse x et l'altezza di un carattere che vale 1 sull'asse y troverò:
|
|
|* ** * * *
-----------------
scusa la rozzezza del grafico...
In questo grafico ogni asterisco corrisponde a un valore della serie.
Con il tuo metodo come sarebbe disegnato il grafico?
Quindi per esempio considerando la serie che tu poni come esempio, con lo spazio di un carattere che vale 10 sull'asse x et l'altezza di un carattere che vale 1 sull'asse y troverò:
|
|
|* ** * * *
-----------------
scusa la rozzezza del grafico...
In questo grafico ogni asterisco corrisponde a un valore della serie.
Con il tuo metodo come sarebbe disegnato il grafico?
piu' o meno quello che fa excel, calcolando il "limite massimo" e rapportando tutti i valori ad esso.
Nel mio esempio, viene cosi':
Nel mio esempio, viene cosi':

Il tuo grafico non è quello che desidero io perchè avevo detto di volere i dati della serie, per esempio la tua: 50, 80, 10, 150, 100, 60 etc etc., sull'asse x (quello orizzontale), mentre sull'asse y il numero di volte che il valore compare nella serie. Invece nel grafico che hai fatto i valori 50,80,10, etc etc stanno chiaramente sull'asse y.
Lo so Excel di default tratta così la rappresentazione di una serie di valori in un grafico a barre...
Lo so Excel di default tratta così la rappresentazione di una serie di valori in un grafico a barre...