Guida introduttiva a Chart.js: grafici a linee e a barre
Italian (Italiano) translation by Francesco Turlon (you can also view the original English article)
Nel primo tutorial introduttivo della serie su Chart.js, è stato descritto come installare e utilizzare Chart.js in un progetto. Avete anche imparato alcune opzioni di configurazione globale che possono essere utilizzate per modificare i font e le descrizioni dei tooltip di diversi grafici. In questo tutorial, imparerete come creare grafici a barre e a linee in Chart.js.
Creazione di grafici a linee
I grafici a linee sono utili quando si desidera visualizzare le modifiche nel valore di una determinata variabile per quanto riguarda i cambiamenti in qualche altra variabile. L'altra variabile è di solito il tempo. Ad esempio, i grafici a linee permettono di visualizzare la velocità di un veicolo durante intervalli di tempo specifici.
Chart.js permette di creare grafici a linee impostando la chiave type
su line
. Ecco un esempio:
1 |
var lineChart = new Chart(speedCanvas, { |
2 |
type: 'line', |
3 |
data: speedData, |
4 |
options: chartOptions |
5 |
});
|
Ci sarà ora da fornire i dati, nonché le opzioni di configurazione che abbiamo bisogno per tracciare il grafico a linee.
1 |
var speedData = { |
2 |
labels: ["0s", "10s", "20s", "30s", "40s", "50s", "60s"], |
3 |
datasets: [{ |
4 |
label: "Car Speed", |
5 |
data: [0, 59, 75, 20, 20, 55, 40], |
6 |
}]
|
7 |
};
|
8 |
|
9 |
var chartOptions = { |
10 |
legend: { |
11 |
display: true, |
12 |
position: 'top', |
13 |
labels: { |
14 |
boxWidth: 80, |
15 |
fontColor: 'black' |
16 |
}
|
17 |
}
|
18 |
};
|
Poiché non abbiamo indicato alcun colore per il grafico a linee, verrà utilizzato il colore rgba(0,0,0,0.1)
predefinito. Non abbiamo fatto alcuna modifica al tooltip o alla legenda. Potete leggere di più su come modificare le dimensioni del grafico,il tooltip o la legenda nella prima parte della serie.
In questa parte, ci concentreremo sulle varie opzioni disponibili specificamente per la modifica di grafici a linee. Tutte le opzioni e i dati che abbiamo fornito sopra formeranno il seguente grafico.
Il colore dell'area sotto la curva è determinato dalla chiave backgroundColor
. Tutti i grafici a linee disegnati utilizzando questo metodo saranno riempiti con il colore specificato. È possibile impostare il valore della chiave fill
su false
se si desidera solo disegnare una linea e non riempirla con alcun colore.
Un'altra cosa che potreste aver notato è che stiamo usando per tracciare i punti di dati separati. La libreria interpola automaticamente i valori di tutti gli altri punti utilizzando algoritmi interni.
Per impostazione predefinita, i punti vengono tracciati utilizzando un'interpolazione cubica ponderata personalizzata. Tuttavia, è possibile anche impostare il valore della chiave cubicInterpolationMode
su monotone
per tracciare punti più accuratamente se il grafico viene definito mediante l'equazione y = f (x)
. La tensione della curva di Bezier tracciata è determinata dalla chiave lineTension
. È possibile impostare il valore a zero per disegnare linee rette. Siete pregati di notare che questa chiave viene ignorata quando il valore di cubicInterpolationMode
è già stato specificato.
È anche possibile impostare il valore del colore del bordo e la sua larghezza utilizzando le chiavi borderColor
e borderWidth
. Se si desidera tracciare il grafico utilizzando una linea tratteggiata invece di una linea continua, è possibile utilizzare la chiave borderDash
. Accetta un array come valore i cui elementi determinano la lunghezza e la spaziatura dei trattini rispettivamente.
L'aspetto dei punti tracciati può essere controllato utilizzando le proprietà pointBorderColor
, pointBackgroundColor
, pointBorderWidth
, pointRadius
e pointHoverRadius
. C'è anche una chiave di pointHitRadius
, che determina la distanza alla quale i punti tracciati cominceranno ad interagire con il mouse.
1 |
var speedData = { |
2 |
labels: ["0s", "10s", "20s", "30s", "40s", "50s", "60s"], |
3 |
datasets: [{ |
4 |
label: "Car Speed", |
5 |
data: [0, 59, 75, 20, 20, 55, 40], |
6 |
lineTension: 0, |
7 |
fill: false, |
8 |
borderColor: 'orange', |
9 |
backgroundColor: 'transparent', |
10 |
borderDash: [5, 5], |
11 |
pointBorderColor: 'orange', |
12 |
pointBackgroundColor: 'rgba(255,150,0,0.5)', |
13 |
pointRadius: 5, |
14 |
pointHoverRadius: 10, |
15 |
pointHitRadius: 30, |
16 |
pointBorderWidth: 2, |
17 |
pointStyle: 'rectRounded' |
18 |
}]
|
19 |
};
|
L'oggetto speedData
sopra disegna gli stessi punti di dati come nel grafico precedente, ma con valori personalizzati per tutte le proprietà.
È anche possibile tracciare linee multiple in un singolo grafico e fornire diverse opzioni per disegnare ciascuna di esse come in questo esempio:
1 |
var dataFirst = { |
2 |
label: "Car A - Speed (mph)", |
3 |
data: [0, 59, 75, 20, 20, 55, 40], |
4 |
lineTension: 0.3, |
5 |
// Set More Options
|
6 |
};
|
7 |
|
8 |
var dataSecond = { |
9 |
label: "Car B - Speed (mph)", |
10 |
data: [20, 15, 60, 60, 65, 30, 70], |
11 |
// Set More Options
|
12 |
};
|
13 |
|
14 |
var speedData = { |
15 |
labels: ["0s", "10s", "20s", "30s", "40s", "50s", "60s"], |
16 |
datasets: [dataFirst, dataSecond] |
17 |
};
|
18 |
|
19 |
|
20 |
var lineChart = new Chart(speedCanvas, { |
21 |
type: 'line', |
22 |
data: speedData |
23 |
});
|
Creazione di grafici a barre
I grafici a barre sono utili quando si desidera confrontare una singola metrica per entità diverse — ad esempio, il numero di auto vendute da aziende diverse o il numero di persone di determinati gruppi di età in una città. È possibile creare grafici a barre in Chart.js impostando la chiave type
su bar
. Per impostazione predefinita, questo creerà grafici con barre verticali. Se si desidera creare grafici con barre orizzontali, sarà necessario impostare type
su horizontalBar
.
1 |
var barChart = new Chart(densityCanvas, { |
2 |
type: 'bar', |
3 |
data: densityData, |
4 |
options: chartOptions |
5 |
});
|
Creiamo un grafico a barre che traccia la densità di tutti i pianeti nel nostro sistema solare. I dati di densità sono stati presi dal Planetary Fact Sheet fornito dalla NASA.
1 |
var densityData = { |
2 |
label: 'Density of Planets (kg/m3)', |
3 |
data: [5427, 5243, 5514, 3933, 1326, 687, 1271, 1638] |
4 |
};
|
5 |
|
6 |
var barChart = new Chart(densityCanvas, { |
7 |
type: 'bar', |
8 |
data: { |
9 |
labels: ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"], |
10 |
datasets: [densityData] |
11 |
}
|
12 |
});
|
I parametri forniti sopra creeranno il seguente grafico:
Proprio come il grafico a linee, le barre sono riempite con un colore grigio chiaro anche questa volta. È possibile modificare il colore delle barre utilizzando la chiave backgroundColor
. Allo stesso modo, il colore e lo spessore dei bordi di diverse barre possono essere specificati utilizzando le chiavi borderColor
e borderWidth
.
Se si desidera che la libreria non disegni il bordo per un punto specifico del disegno, è possibile specificare quel punto come un valore della chiave borderSkipped
. È possibile impostare il valore per top
, left
, bottom
, or right
. È anche possibile modificare il colore di sfondo e bordo di diverse barre quando il puntatore del mouse si poggia su di essi utilizzando la chiave hoverBorderColor
e hoverBackgroundColor
.
Le barre nel grafico a barre sopra sono state ridimensionate automaticamente. Tuttavia, è possibile controllare la larghezza delle singole barre utilizzando le proprietà barThickness
e barPercentage
. La chiave barThickness
viene utilizzata per impostare lo spessore delle barre in pixel, e barPercentage
viene utilizzato per impostare lo spessore come percentuale della larghezza della categoria disponibile.
È inoltre possibile mostrare o nascondere uno specifico asse utilizzando la sua chiave display
. Impostando il valore del display
su false
nasconderà quello specifico asse. Potete leggere di più su tutte queste opzioni nella pagina di documentazione.
Rendiamo più interessante il grafico della densità sovrascrivendo i valori predefiniti per grafici a barre utilizzando il seguente codice.
1 |
var densityData = { |
2 |
label: 'Density of Planets (kg/m3)', |
3 |
data: [5427, 5243, 5514, 3933, 1326, 687, 1271, 1638], |
4 |
backgroundColor: [ |
5 |
'rgba(0, 99, 132, 0.6)', |
6 |
'rgba(30, 99, 132, 0.6)', |
7 |
'rgba(60, 99, 132, 0.6)', |
8 |
'rgba(90, 99, 132, 0.6)', |
9 |
'rgba(120, 99, 132, 0.6)', |
10 |
'rgba(150, 99, 132, 0.6)', |
11 |
'rgba(180, 99, 132, 0.6)', |
12 |
'rgba(210, 99, 132, 0.6)', |
13 |
'rgba(240, 99, 132, 0.6)' |
14 |
],
|
15 |
borderColor: [ |
16 |
'rgba(0, 99, 132, 1)', |
17 |
'rgba(30, 99, 132, 1)', |
18 |
'rgba(60, 99, 132, 1)', |
19 |
'rgba(90, 99, 132, 1)', |
20 |
'rgba(120, 99, 132, 1)', |
21 |
'rgba(150, 99, 132, 1)', |
22 |
'rgba(180, 99, 132, 1)', |
23 |
'rgba(210, 99, 132, 1)', |
24 |
'rgba(240, 99, 132, 1)' |
25 |
],
|
26 |
borderWidth: 2, |
27 |
hoverBorderWidth: 0 |
28 |
};
|
29 |
|
30 |
var chartOptions = { |
31 |
scales: { |
32 |
yAxes: [{ |
33 |
barPercentage: 0.5 |
34 |
}]
|
35 |
},
|
36 |
elements: { |
37 |
rectangle: { |
38 |
borderSkipped: 'left', |
39 |
}
|
40 |
}
|
41 |
};
|
42 |
|
43 |
var barChart = new Chart(densityCanvas, { |
44 |
type: 'horizontalBar', |
45 |
data: { |
46 |
labels: ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"], |
47 |
datasets: [densityData], |
48 |
},
|
49 |
options: chartOptions |
50 |
});
|
L'oggetto densityData
viene utilizzato per impostare il colore di sfondo e bordo delle barre. Ci sono due cose da notare nel codice precedente. In primo luogo, i valori delle proprietà barPercentage
e borderSkipped
sono stati impostati all'interno dell'oggetto chartOptions
anziché dell'oggetto dataDensity
.
In secondo luogo, il type
del grafico è stato impostato a horizontalBar
questa volta. Questo significa anche che si dovrà modificare il valore di barThickness
e barPercentage
per l'asse y invece che per l'asse x affinchè non abbiano alcun effetto sulle barre.
I parametri forniti sopra creeranno il seguente grafico a barre.
È inoltre possibile tracciare più set di dati sullo stesso grafico assegnando un id dell'asse corrispondente a un particolare set di dati. La chiave di xAxisID
viene utilizzata per assegnare l'id di qualsiasi asse x al set di dati. Allo stesso modo, la chiave di yAxisID
viene utilizzata per assegnare l'id di qualsiasi asse y al set di dati. Entrambi gli assi hanno anche una chiave di id
che è possibile utilizzare per assegnare un ID univoco.
Se l'ultimo paragrafo è stato un po' di confusionario, l'esempio seguente renderà le cose chiare.
1 |
var densityData = { |
2 |
label: 'Density of Planet (kg/m3)', |
3 |
data: [5427, 5243, 5514, 3933, 1326, 687, 1271, 1638], |
4 |
backgroundColor: 'rgba(0, 99, 132, 0.6)', |
5 |
borderColor: 'rgba(0, 99, 132, 1)', |
6 |
yAxisID: "y-axis-density" |
7 |
};
|
8 |
|
9 |
var gravityData = { |
10 |
label: 'Gravity of Planet (m/s2)', |
11 |
data: [3.7, 8.9, 9.8, 3.7, 23.1, 9.0, 8.7, 11.0], |
12 |
backgroundColor: 'rgba(99, 132, 0, 0.6)', |
13 |
borderColor: 'rgba(99, 132, 0, 1)', |
14 |
yAxisID: "y-axis-gravity" |
15 |
};
|
16 |
|
17 |
var planetData = { |
18 |
labels: ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"], |
19 |
datasets: [densityData, gravityData] |
20 |
};
|
21 |
|
22 |
var chartOptions = { |
23 |
scales: { |
24 |
xAxes: [{ |
25 |
barPercentage: 1, |
26 |
categoryPercentage: 0.6 |
27 |
}],
|
28 |
yAxes: [{ |
29 |
id: "y-axis-density" |
30 |
}, { |
31 |
id: "y-axis-gravity" |
32 |
}]
|
33 |
}
|
34 |
};
|
35 |
|
36 |
var barChart = new Chart(densityCanvas, { |
37 |
type: 'bar', |
38 |
data: planetData, |
39 |
options: chartOptions |
40 |
});
|
Qui abbiamo creato due assi y con ID univoci, e sono stati assegnati ai singoli DataSet utilizzando la chiave di yAxisID
. Le chiavi barPercentage
e categoryPercentage
sono state utilizzate qui per raggruppare le barre per singoli pianeti. L'impostazione di categoryPercentage
su un valore inferiore aumenta lo spazio tra le barre di pianeti diversi. Allo stesso modo, impostando barPercentage
su un valore superiore riduce lo spazio tra le barre dello stesso pianeta.
Considerazioni finali
In questo tutorial, abbiamo visto tutti gli aspetti di grafici a linee e grafici a barre in Chart.js. Si dovrebbe ora essere in grado di creare grafici base, modificare il loro aspetto e la visualizzazione di più set di dati sullo stesso grafico senza problemi. Nella parte successiva della serie, potrete conoscere i grafici radar e zona polare in Chart.js.
Spero che vi sia piaciuto questo tutorial. Se avete domande, per favore fatemelo sapere nei commenti.