Panoramica
VegaChart è una delle tante possibili visualizzazioni che possono essere create utilizzando la grammatica di visualizzazione Vega, un linguaggio dichiarativo per creare, salvare e condividere progetti di visualizzazione interattivi. Con Vega puoi descrivere l'aspetto visivo e il comportamento interattivo di una visualizzazione in formato JSON e generare viste basate sul Web tramite Canvas o SVG.
Quando disegni un VegaChart, devi includere all'interno delle opzioni una specifica su come creare il grafico nella grammatica di visualizzazione Vega. Alcuni esempi di tali specifiche sono riportati di seguito, mentre altri sono disponibili alla pagina Esempi di VegaChart.
Nota: sebbene la VegaChart di Google Tables possa disegnare qualsiasi grafico Vega che puoi specificare con una specifica JSON Vega (inclusi tutti i contenuti nella Galleria di esempio), non sono ancora disponibili funzionalità aggiuntive che richiedono chiamate all'API Vega.
Un semplice esempio: il grafico a barre
Di seguito è riportato un semplice esempio di grafico Vega che disegna un grafico a barre. Consulta l'esempio originale, un tutorial dettagliato e il grafico a barre nell'editor di grafici Vega.
Sebbene questo sia un altro modo per produrre un grafico a barre in Google Tables, prevediamo di integrare tutte le funzionalità degli altri grafici a barre e a colonne in una nuova implementazione basata su questo VegaChart.
In questo esempio, tieni presente che l'opzione "Dati" è sostituita dalla seguente, che usa "tabella dati" fornita dalla chiamata di disegno come "origine" per un altro oggetto dati chiamato "tabella", mentre "tabella" è usata nel resto delle specifiche Vega.
'data': [{'name': 'table', 'source': 'datatable'}],
<html> <head> <script src='https://www.gstatic.com/charts/loader.js'></script> <script> google.charts.load('upcoming', {'packages': ['vegachart']}).then(drawChart); function drawChart() { const dataTable = new google.visualization.DataTable(); dataTable.addColumn({type: 'string', 'id': 'category'}); dataTable.addColumn({type: 'number', 'id': 'amount'}); dataTable.addRows([ ['A', 28], ['B', 55], ['C', 43], ['D', 91], ['E', 81], ['F', 53], ['G', 19], ['H', 87], ]); const options = { "vega": { "$schema": "https://vega.github.io/schema/vega/v4.json", "width": 500, "height": 200, "padding": 5, 'data': [{'name': 'table', 'source': 'datatable'}], "signals": [ { "name": "tooltip", "value": {}, "on": [ {"events": "rect:mouseover", "update": "datum"}, {"events": "rect:mouseout", "update": "{}"} ] } ], "scales": [ { "name": "xscale", "type": "band", "domain": {"data": "table", "field": "category"}, "range": "width", "padding": 0.05, "round": true }, { "name": "yscale", "domain": {"data": "table", "field": "amount"}, "nice": true, "range": "height" } ], "axes": [ { "orient": "bottom", "scale": "xscale" }, { "orient": "left", "scale": "yscale" } ], "marks": [ { "type": "rect", "from": {"data":"table"}, "encode": { "enter": { "x": {"scale": "xscale", "field": "category"}, "width": {"scale": "xscale", "band": 1}, "y": {"scale": "yscale", "field": "amount"}, "y2": {"scale": "yscale", "value": 0} }, "update": { "fill": {"value": "steelblue"} }, "hover": { "fill": {"value": "red"} } } }, { "type": "text", "encode": { "enter": { "align": {"value": "center"}, "baseline": {"value": "bottom"}, "fill": {"value": "#333"} }, "update": { "x": {"scale": "xscale", "signal": "tooltip.category", "band": 0.5}, "y": {"scale": "yscale", "signal": "tooltip.amount", "offset": -2}, "text": {"signal": "tooltip.amount"}, "fillOpacity": [ {"test": "datum === tooltip", "value": 0}, {"value": 1} ] } } } ] } }; const chart = new google.visualization.VegaChart(document.getElementById('chart-div')); chart.draw(dataTable, options); } </script> </head> <body> <div id="chart-div" style="width: 700px; height: 250px;"></div> </body> </html>
Caricamento
Il nome del pacchetto google.charts.load
è "vegachart"
.
google.charts.load("current", {packages: ["vegachart"]});
Il nome della classe della visualizzazione è google.visualization.VegaChart
.
var visualization = new google.visualization.VegaChart(container);
Formato dei dati
I dati possono essere trasmessi a un VegaChart in modo molto simile a quello di altri grafici di Google utilizzando una tabella dati (o DataView). La differenza principale è che, invece di basarsi sull'ordine delle colonne per determinare come vengono utilizzate, VegaChart si basa sull'ID di ogni colonna che corrisponde a quanto previsto per la specifica visualizzazione Vega che hai specificato.
Ad esempio, la seguente DataTable viene creata con colonne che hanno ID per
'category'
e 'amount'
e gli stessi ID vengono utilizzati nell'opzione "vega" per fare riferimento a
queste colonne.
const dataTable = new google.visualization.DataTable(); dataTable.addColumn({type: 'string', 'id': 'category'}); dataTable.addColumn({type: 'number', 'id': 'amount'}); dataTable.addRows([ ['A', 28], ['B', 55], ['C', 43], ]); const options = { 'vega': { ... // Here we create the Vega data object named 'datatable', // which will be passed in via the draw() call with a DataTable. 'data': {'name': 'datatable'}, 'scales': [ { 'name': 'yscale', // Here is an example of how to use the 'amount' field from 'datatable'. 'domain': {'data': 'datatable', 'field': 'amount'}, } ] } }; const chart = new google.visualization.VegaChart( document.getElementById('chart-div')); chart.draw(dataTable, options);
// A DataTable is required, but it may be empty. const dataTable = new google.visualization.DataTable(); const options = { 'vega': { // Here the data is specified inline in the Vega specification. "data": [ { "name": "table", "values": [ {"category": "A", "amount": 28}, {"category": "B", "amount": 55}, {"category": "C", "amount": 43}, ] } ], 'scales': [ { 'name': 'yscale', // Here is how Vega normally uses the 'amount' field from 'table'. "domain": {"data": "table", "field": "category"}, } ] } }; const chart = new google.visualization.VegaChart( document.getElementById('chart-div')); chart.draw(dataTable, options);
Tuttavia, solo una di queste tabelle dati può essere trasferita a VegaChart in questo modo, mentre alcuni grafici Vega richiedono più di una tabella di dati. Affronteremo questo limite in una release futura di Google grafici.
Nel frattempo, puoi specificare eventuali dati aggiuntivi da utilizzare nell'opzione
'vega'
'data'
, integrandoli o caricandoli da un URL.
Di seguito sono riportati alcuni esempi.
Opzioni di configurazione
Nome | |
---|---|
area grafico |
Un oggetto con membri per configurare il posizionamento e le dimensioni dell'area del grafico (dove viene tracciato il grafico stesso, escludendo l'asse e le legende). Sono supportati due formati: un numero o un
seguito da %. Un numero semplice è un valore in pixel; un numero seguito da % è una
percentuale. Esempio: Tipo: oggetto
Predefinito: null
|
chartArea.bottom |
Quanto dista il grafico dal bordo inferiore. Tipo: numero o stringa
Predefinito: automatica
|
chartArea.left |
La distanza desiderata dal bordo sinistro. Tipo: numero o stringa
Predefinito: automatica
|
graficoArea.destra |
La distanza dal disegno dal bordo destro. Tipo: numero o stringa
Predefinito: automatica
|
chartArea.top |
La distanza da cui tracciare il grafico dal bordo superiore. Tipo: numero o stringa
Predefinito: automatica
|
graficoarea.larghezza |
Larghezza area grafico. Tipo: numero o stringa
Predefinito: automatica
|
graficoArea.altezza |
Altezza area grafico. Tipo: numero o stringa
Predefinito: automatica
|
height |
Altezza del grafico in pixel. Tipo: numero
Predefinito: altezza dell'elemento contenitore
|
width |
La larghezza del grafico in pixel. Tipo: numero
Predefinito: larghezza dell'elemento che la contiene
|
Metodi
Metodo | |
---|---|
draw(data, options) |
Disegna il grafico. Il grafico accetta ulteriori chiamate ai metodi solo dopo l'attivazione dell'evento Tipo di reso: nessuno
|
getAction(actionID) |
Restituisce l'oggetto azione della descrizione comando con il Tipo di reso: oggetto
|
getBoundingBox(id) |
Restituisce un oggetto contenente i valori sinistro, superiore, larghezza e altezza dell'elemento del grafico
I valori sono relativi al contenitore del grafico. Chiamalo dopo il disegno del grafico. Tipo di reso: oggetto
|
getChartAreaBoundingBox() |
Restituisce un oggetto contenente il lato sinistro, superiore, la larghezza e l'altezza dei contenuti del grafico (escluse le etichette e la legenda):
I valori sono relativi al contenitore del grafico. Chiamalo dopo il disegno del grafico. Tipo di reso: oggetto
|
getChartLayoutInterface() |
Restituisce un oggetto contenente informazioni sul posizionamento sullo schermo del grafico e sui suoi elementi. Nell'oggetto restituito possono essere richiamati i metodi seguenti:
Chiamalo dopo il disegno del grafico. Tipo di reso: oggetto
|
getHAxisValue(xPosition, optional_axis_index) |
Restituisce il valore dei dati orizzontali a Esempio: Chiamalo dopo il disegno del grafico. Tipo di reso: numero
|
getImageURI() |
Restituisce il grafico serializzato come URI immagine. Chiamalo dopo il disegno del grafico. Consulta la sezione Stampa di grafici PNG. Tipo di reso: stringa
|
getSelection() |
Restituisce una matrice delle entità del grafico selezionate.
Per questo grafico è possibile selezionare una sola entità alla volta.
Tipo di reso: array di elementi di selezione
|
getVAxisValue(yPosition, optional_axis_index) |
Restituisce il valore dei dati verticali in Esempio: Chiamalo dopo il disegno del grafico. Tipo di reso: numero
|
getXLocation(dataValue, optional_axis_index) |
Restituisce la coordinata x di pixel di Esempio: Chiamalo dopo il disegno del grafico. Tipo di reso: numero
|
getYLocation(dataValue, optional_axis_index) |
Restituisce la coordinata y di pixel Esempio: Chiamalo dopo il disegno del grafico. Tipo di reso: numero
|
removeAction(actionID) |
Rimuove dal grafico l'azione della descrizione comando con il Tipo di reso:
none |
setAction(action) |
Imposta un'azione della descrizione comando da eseguire quando l'utente fa clic sul testo dell'azione.
Il metodo
Tutte le azioni relative alla descrizione comando devono essere impostate prima di chiamare il metodo Tipo di reso:
none |
setSelection() |
Seleziona le entità del grafico specificate. Annulla qualsiasi selezione precedente.
Per questo grafico è possibile selezionare una sola entità alla volta.
Tipo di reso: nessuno
|
clearChart() |
Cancella il grafico e rilascia tutte le risorse allocate. Tipo di reso: nessuno
|
Eventi
Per saperne di più su come utilizzare questi eventi, consulta Interattività di base, Gestione degli eventi ed Eventi di attivazione.
Nome | |
---|---|
animationfinish |
Attivato quando l'animazione di transizione è completa. Proprietà: nessuna
|
click |
Attivato quando l'utente fa clic all'interno del grafico. Può essere utilizzato per identificare quando gli utenti fanno clic su titolo, elementi dati, voci di legenda, assi, linee di griglia o etichette. Proprietà: targetID
|
error |
Attivato quando si verifica un errore durante il tentativo di rendering del grafico. Proprietà: id, messaggio
|
legendpagination |
Attivato quando l'utente fa clic sulle frecce di impaginazione della legenda. Rimanda l'indice della pagina attuale con base zero e il numero totale di pagine. Proprietà: currentPageIndex, totalpages
|
onmouseover |
Attivato quando l'utente passa il mouse sopra un'entità visiva. Rimanda gli indici delle righe e delle colonne dell'elemento della tabella dati corrispondente. Proprietà: riga, colonna
|
onmouseout |
Attivato quando l'utente allontana il puntatore del mouse da un'entità visiva. Rimanda gli indici delle righe e delle colonne dell'elemento della tabella dati corrispondente. Proprietà: riga, colonna
|
ready |
Il grafico è pronto per le chiamate ai metodi esterni. Se vuoi interagire con il grafico e chiamare i metodi dopo averlo disegnato, devi configurare un listener per questo evento prima di chiamare il metodo Proprietà: nessuna
|
select |
Attivato quando l'utente fa clic su un'entità visiva. Per sapere cosa è stato selezionato, chiama il numero
Proprietà: nessuna
|
Norme sui dati
Tutto il codice e i dati vengono elaborati e visualizzati nel browser. Nessun dato viene inviato ad alcun server.