Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Importante
Questa funzionalità è in Anteprima Pubblica.
Le visualizzazioni personalizzate consentono di personalizzare i grafici nei dashboard di intelligenza artificiale/BI oltre i tipi di visualizzazione predefiniti. Le visualizzazioni personalizzate usano la libreria Vega-Lite per eseguire il rendering dei grafici da una specifica JSON.
Le visualizzazioni personalizzate possono renderizzare tipi di grafici specializzati che vanno oltre le opzioni integrate. Il seguente albero filogenetico utilizza una disposizione guidata dalla forza per raggruppare i record correlati attorno ai gruppi e centri familiari condivisi:
Per costruire un grafico passo dopo passo, vedi Visualizzazioni di esempio. Per fare riferimento alle specifiche di altri tipi di carte, vedi Ulteriori specifiche delle carte.
Creare una visualizzazione personalizzata
Per creare una visualizzazione personalizzata:
- Selezionare un set di dati.
- Nel riquadro di configurazione della visualizzazione selezionare Custom Viz (Viz personalizzato ) nella sezione Visualizzazione avanzata .
- Nella sezione Campi aggiungere i campi da usare. Ogni campo ha un nome univoco. Fai riferimento ai campi nella specifica Vega-Lite utilizzando questi nomi.
- Inserisci la specifica JSON Vega-Lite nell'editor della specifica Vega-Lite.
Colonne del set di dati di riferimento
Colonne di riferimento in una specifica Vega-Lite in uno dei seguenti modi:
Utilizzare il
"field": "{columnName}". Nell'esempio seguente laxFieldcolonna viene assegnata all'asse x:"encoding": { "x": { "field": "xField", "type": "quantitative" } }Nelle espressioni usare
datum["{columnName}"]odatum.{columnName}. Nell'esempio seguente viene definita una nuovaxcolonna dallercolonne eangle:{ "calculate": "datum.r * cos(datum.angle)", "as": "x" }
Per ulteriori informazioni, vedere datum nella documentazione sulle espressioni di Vega.
Ereditare il tema del dashboard
Le visualizzazioni personalizzate si adattano automaticamente al tema del dashboard, inclusa la modalità chiara e scura. Gli elementi del grafico seguenti ereditano i valori del tema senza apportare modifiche alla specifica:
- I caratteri degli assi, della legenda, del titolo e dell'intestazione corrispondono a quelli configurati per il dashboard.
- Le linee della griglia degli assi corrispondono al colore della griglia del cruscotto per la modalità attiva.
- Lo sfondo del grafico è trasparente sullo sfondo a tema del widget.
Le impostazioni definite nel blocco della config specifica hanno la precedenza sulle impostazioni predefinite ereditate.
Riferimenti ai valori dei temi nelle espressioni
Per assegnare uno stile ai marcatori con valori dipendenti dal tema, fare riferimento ai segnali seguenti all'interno di un'espressione Vega-Lite ({ "expr": "..." }):
| Segnale | Description |
|---|---|
colors |
Token di colore già risolti per la modalità attiva. Usali per valori comuni come colors.textPrimary.default, colors.gridColor e colors.markHighlightColor. Non indicizzarli con [mode]; sono già risolti. |
mode |
Modalità colore attiva, 'light' o 'dark'. Usarlo per indicizzare dashboardTheme i campi che forniscono varianti per modalità. |
dashboardTheme |
Tema completo configurato dal proprietario del dashboard, inclusi i tipi di carattere (resolvedFontSettings), la tavolozza categorica (visualizationColors) e i colori per modalità (gridLineColor). I campi con varianti per modalità richiedono l'indice [mode] . |
I colors segnali e dashboardTheme sono indipendenti. Il colors segnale fornisce token di comodità risolti per la modalità attiva, esponendo però dashboardTheme il tema completo configurato dal proprietario. Usare colors prima, e usare dashboardTheme per i font, la tavolozza completa o qualsiasi valore che colors non fornisce.
I seguenti esempi mostrano come fare riferimento ai valori del tema:
Usare il tipo di carattere del corpo del dashboard per un segno di testo:
{ "expr": "dashboardTheme.resolvedFontSettings.fieldValue.fontFamily" }Usare il colore del titolo del dashboard per la modalità attiva:
{ "expr": "dashboardTheme.resolvedFontSettings.fieldTitle.fontColor[mode]" }Usare un colore dalla tavolozza categorica del dashboard:
{ "expr": "dashboardTheme.visualizationColors[0]" }
Nota
I colors token sono già stati risolti per la modalità attiva. Salta l'indice [mode] e usa colors.markHighlightColor, non colors.markHighlightColor[mode]. I campi sotto dashboardTheme di questo hanno varianti per modalità, come dashboardTheme.gridLineColor[mode], richiedono l'indice [mode] .
Filtrare altri widget in base alla selezione
Una visualizzazione personalizzata può fungere da origine filtro incrociato: quando un utente fa clic su un segno, la selezione filtra gli altri widget nel dashboard. Per abilitare questa operazione, aggiungere un parametro di selezione del punto con il nome databricks_mark_selectionriservato . Il renderer rileva questo nome e connette la selezione allo stato del filtro incrociato del dashboard.
"params": [
{
"name": "databricks_mark_selection",
"select": { "type": "point", "fields": ["categoryName"] }
}
]
Di seguito vengono indicati i requisiti per questo parametro:
- Il parametro
namedeve essere esattamentedatabricks_mark_selection. Qualsiasi altro nome viene considerato come un parametro regolare e non determina il filtro incrociato. - Il parametro
select.typedeve essere impostato supoint. Le selezioni a intervallo (brush) non sono supportate come origini del filtro incrociato. -
select.fieldsdeve elencare i nomi di campo definiti nella sezione Campi della configurazione del widget, non i nomi delle colonne non elaborate. - Elencare solo i campi della dimensione (raggruppamento) in
select.fields. Le misure aggregate, ad esempioSUM(...)oAVG(...), non possono eseguire un filtro incrociato. - Per selezionare più campi, elencarli insieme:
"fields": ["categoryName", "regionName"].
Evidenzia i segni selezionati
Per mettere in evidenza le marche selezionate, usa le condizioni stroke e strokeWidth su una marca basata sul riempimento (ad esempio bar, arc o rect) e mantieni l'encoding color associato al campo. Utilizzare { "expr": "colors.markHighlightColor" } per il tratto in modo che l'evidenziazione rimanga leggibile sia in modalità chiara che scura.
Nell'esempio seguente, il resto del dashboard viene filtrato in base a categoryName quando si fa clic su una barra. Le barre selezionate ottengono un tratto a tema e le barre deselezionate vengono disattivate mantenendo la codifica dei colori.
Specifica di JSON
{
"$schema": "https://vega.github.io/schema/vega-lite/v6.json",
"data": { "name": "databricks_query" },
"width": "container",
"height": "container",
"config": { "autosize": { "type": "fit", "contains": "padding" } },
"params": [
{
"name": "databricks_mark_selection",
"select": { "type": "point", "fields": ["categoryName"] }
}
],
"mark": { "type": "bar", "stroke": null },
"encoding": {
"x": { "field": "categoryName", "type": "nominal" },
"y": { "field": "salesValue", "type": "quantitative" },
"color": { "field": "categoryName", "type": "nominal" },
"fillOpacity": {
"condition": { "param": "databricks_mark_selection", "value": 1 },
"value": 0.3
}
"stroke": {
"condition": {
"param": "databricks_mark_selection",
"empty": false,
"value": { "expr": "colors.markHighlightColor" }
},
"value": null
},
"strokeWidth": {
"condition": { "param": "databricks_mark_selection", "empty": false, "value": 2 },
"value": 0
}
}
}
Ridimensiona automaticamente una tabella
Per ridimensionare un grafico per adattarlo al contenitore, aggiungere le impostazioni seguenti al livello superiore della specifica:
"width": "container",
"height": "container",
"config": {
"autosize": {
"type": "fit",
"contains": "padding"
}
}
Visualizzazioni di esempio
I seguenti esempi guidano la costruzione di una visualizzazione personalizzata passo dopo passo, da un semplice grafico stratificato a un albero filogenetico più avanzato.
Tabella stratificata con media mobile
Questo esempio crea un grafico stratificato che traccia i punti dei dati grezzi sulla temperatura con una linea della media mobile in sovrapposizione, utilizzando i dati meteo dei dataset di esempio di Databricks.
Creare un set di dati con la query seguente:
SELECT date, temperature AS temp_max FROM samples.accuweather.historical_hourly_imperial WHERE city_name = 'singapore' ORDER BY date;Nel riquadro di configurazione della visualizzazione, in Avanzate selezionare Viz personalizzato.
Selezionare il set di dati creato nel passaggio precedente.
Nella sezione Campi aggiungere un campo per la colonna data e impostarne Il nome su
date.Aggiungere un campo per la colonna temperature e impostarne Il nome su
temp_max.Copia la specifica seguente nell'editor delle specifiche di Vega-Lite. Se l'asse x è tagliato, vedi Ridimensiona automaticamente una tabella (Redimensiona automaticamente).
Specifica di JSON
{ "$schema": "https://vega.github.io/schema/vega-lite/v5.json", "width": "container", "height": "container", "config": { "autosize": { "type": "fit", "contains": "padding" } }, "data": { "name": "databricks_query" }, "transform": [ { "window": [{ "field": "temp_max", "op": "mean", "as": "rolling_mean" }], "frame": [-15, 15] } ], "encoding": { "x": { "field": "date", "type": "temporal", "title": "Date" }, "y": { "type": "quantitative", "scale": { "zero": false }, "axis": { "title": "Max temperature and rolling mean" } } }, "layer": [ { "mark": { "type": "point", "opacity": 0.3 }, "encoding": { "y": { "field": "temp_max", "title": "Max temperature" } } }, { "mark": { "type": "line", "color": "red", "size": 3 }, "encoding": { "y": { "field": "rolling_mean", "title": "Rolling mean of max temperature" } } } ] }
Albero filogenetico
Questo esempio utilizza un piccolo insieme di dati campionari per costruire l'albero filogenetico mostrato in cima a questa pagina. Vega-Lite traccia i punti alle coordinate che fornisci, ma non calcola la posizione dei nodi per un diagramma di rete stesso. Questo calcolo avviene nella query prima che i dati raggiungano la carta, dove la query precalcola le coordinate x e y di ogni punto. La query emette tre tipi di record che la specifica rende come livelli separati: path le righe disegnano i rami curvi, node le righe disegnano i cerchi delle foglie e label le righe posizionano le etichette dei gruppi.
Scaricare i dati di esempio. Ogni riga rappresenta un fossile ricoperto, con
dig_longitudeedig_latitudeche indica le coordinate del sito di scavo.Fare clic su
Dashboard nella barra laterale.Fare clic su Crea dashboard.
Fare clic sulla scheda Dati .
Clicca su Aggiungi dati, poi su Carica dati.
Inserisci il file scaricato nella tabella Crea o modifica dal pannello di upload del file .
Scegli il Catalogo e lo Schema dove vuoi conservare la tabella, poi inserisci il nome di una tabella.
Fare clic su Crea tabella. La tabella completa viene aggiunta automaticamente come dataset.
Clicca su Aggiungi dataset SQL e incolla la query. Nella clausola
FROMdella query, sostituisci i nomi del catalogo, dello schema e delle tabelle con quelli che hai usato quando hai creato la tabella.Crea la visualizzazione personalizzata, seguendo i passaggi di Crea una visualizzazione personalizzata. Nella sezione Campi, aggiungi i seguenti campi, usando ogni nome di campo come Nome:
record_type,x,y,fossil_tagpoint_order,suborder, ,roar_score, ,clade_label,genus_symbol,family_taxonelabel_text. Usa la specifica come Vega-Lite JSON.
Query SQL
WITH base AS (
SELECT
fossil_tag,
genus_symbol,
clade_label,
suborder,
family_taxon,
dig_longitude,
dig_latitude,
roar_score
FROM
`my_catalog`.`default`.`dino_table`
),
root_pt AS (
SELECT
AVG(dig_longitude) AS rx,
AVG(dig_latitude) AS ry
FROM
base
),
group_pts AS (
SELECT
suborder,
AVG(dig_longitude) AS gx,
AVG(dig_latitude) AS gy
FROM
base
GROUP BY
suborder
),
family_pts AS (
SELECT
suborder,
family_taxon,
AVG(dig_longitude) AS fx,
AVG(dig_latitude) AS fy
FROM
base
GROUP BY
suborder,
family_taxon
),
ctx AS (
SELECT
b.fossil_tag,
b.suborder,
b.family_taxon,
b.clade_label,
b.genus_symbol,
b.dig_longitude,
b.dig_latitude,
b.roar_score,
r.rx,
r.ry,
g.gx,
g.gy,
f.fx,
f.fy
FROM
base b
CROSS JOIN root_pt r
JOIN group_pts g
ON b.suborder = g.suborder
JOIN family_pts f
ON b.suborder = f.suborder
AND b.family_taxon = f.family_taxon
),
waypoints AS (
SELECT
fossil_tag,
suborder,
family_taxon,
clade_label,
genus_symbol,
roar_score,
0 AS point_order,
rx AS x,
ry AS y
FROM
ctx
UNION ALL
SELECT
fossil_tag,
suborder,
family_taxon,
clade_label,
genus_symbol,
roar_score,
1,
rx + 0.30 * (gx - rx),
ry + 0.30 * (gy - ry)
FROM
ctx
UNION ALL
SELECT
fossil_tag,
suborder,
family_taxon,
clade_label,
genus_symbol,
roar_score,
2,
gx + 0.15 * (fx - gx),
gy + 0.15 * (fy - gy)
FROM
ctx
UNION ALL
SELECT
fossil_tag,
suborder,
family_taxon,
clade_label,
genus_symbol,
roar_score,
3,
gx + 0.50 * (fx - gx) + 0.03 * (dig_longitude - fx),
gy + 0.50 * (fy - gy) + 0.03 * (dig_latitude - fy)
FROM
ctx
UNION ALL
SELECT
fossil_tag,
suborder,
family_taxon,
clade_label,
genus_symbol,
roar_score,
4,
fx + 0.15 * (dig_longitude - fx),
fy + 0.15 * (dig_latitude - fy)
FROM
ctx
UNION ALL
SELECT
fossil_tag,
suborder,
family_taxon,
clade_label,
genus_symbol,
roar_score,
5,
fx + 0.65 * (dig_longitude - fx),
fy + 0.65 * (dig_latitude - fy)
FROM
ctx
UNION ALL
SELECT
fossil_tag,
suborder,
family_taxon,
clade_label,
genus_symbol,
roar_score,
6,
dig_longitude,
dig_latitude
FROM
ctx
)
SELECT
fossil_tag,
suborder,
point_order,
x,
y,
family_taxon,
clade_label,
genus_symbol,
roar_score,
'path' AS record_type,
CAST(NULL AS STRING) AS label_text
FROM
waypoints
UNION ALL
SELECT
fossil_tag,
suborder,
99 AS point_order,
dig_longitude AS x,
dig_latitude AS y,
family_taxon,
clade_label,
genus_symbol,
roar_score,
'node' AS record_type,
CAST(NULL AS STRING) AS label_text
FROM
base
UNION ALL
SELECT
g.suborder AS fossil_tag,
g.suborder AS suborder,
100 AS point_order,
g.gx
+ (g.gx - r.rx)
* CASE LOWER(g.suborder)
WHEN 'titanosauria' THEN 0.10
WHEN 'hadrosauria' THEN 0.25
WHEN 'ornithopoda' THEN 1.30
WHEN 'stegosauria' THEN 0.73
ELSE 0.55
END AS x,
g.gy
+ (g.gy - r.ry)
* CASE LOWER(g.suborder)
WHEN 'titanosauria' THEN 0.10
WHEN 'hadrosauria' THEN 0.25
WHEN 'ornithopoda' THEN 1.30
WHEN 'stegosauria' THEN 0.73
ELSE 0.55
END AS y,
CAST(NULL AS STRING) AS family_taxon,
CAST(NULL AS STRING) AS clade_label,
CAST(NULL AS STRING) AS genus_symbol,
CAST(NULL AS DOUBLE) AS roar_score,
'label' AS record_type,
g.suborder AS label_text
FROM
group_pts g CROSS JOIN root_pt r
Specifica di JSON
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"data": { "name": "databricks_query" },
"width": "container",
"height": "container",
"background": "white",
"config": {
"autosize": { "type": "fit", "contains": "padding" },
"view": { "stroke": null }
},
"layer": [
{
"transform": [{ "filter": "datum.record_type === 'path'" }],
"mark": {
"type": "line",
"interpolate": "basis",
"strokeCap": "round",
"strokeJoin": "round"
},
"encoding": {
"x": {
"field": "x",
"type": "quantitative",
"axis": null,
"scale": { "zero": false, "nice": false }
},
"y": {
"field": "y",
"type": "quantitative",
"axis": null,
"scale": { "zero": false, "nice": false }
},
"detail": { "field": "fossil_tag", "type": "nominal" },
"order": { "field": "point_order", "type": "quantitative" },
"color": {
"field": "suborder",
"type": "nominal",
"scale": { "scheme": "tableau10" },
"legend": null
},
"opacity": { "value": 0.3 },
"strokeWidth": { "value": 0.8 }
}
},
{
"transform": [{ "filter": "datum.record_type === 'node'" }],
"mark": {
"type": "circle",
"opacity": 0.9,
"stroke": "white",
"strokeWidth": 0.3
},
"encoding": {
"x": {
"field": "x",
"type": "quantitative",
"axis": null,
"scale": { "zero": false, "nice": false }
},
"y": {
"field": "y",
"type": "quantitative",
"axis": null,
"scale": { "zero": false, "nice": false }
},
"color": {
"field": "suborder",
"type": "nominal",
"scale": { "scheme": "tableau10" },
"legend": { "title": "Suborder", "orient": "right" }
},
"size": {
"field": "roar_score",
"type": "quantitative",
"scale": { "domain": [0, 100], "range": [4, 150] },
"legend": null
},
"tooltip": [
{ "field": "clade_label", "title": "Clade" },
{ "field": "genus_symbol", "title": "Symbol" },
{ "field": "suborder", "title": "Suborder" },
{ "field": "family_taxon", "title": "Family" },
{ "field": "roar_score", "title": "Roar Score", "format": ".1f" }
]
}
},
{
"transform": [{ "filter": "datum.record_type === 'label'" }],
"mark": {
"type": "text",
"fontSize": 12,
"fontWeight": "bold",
"opacity": 0.85
},
"encoding": {
"x": {
"field": "x",
"type": "quantitative",
"axis": null,
"scale": { "zero": false, "nice": false }
},
"y": {
"field": "y",
"type": "quantitative",
"axis": null,
"scale": { "zero": false, "nice": false }
},
"text": { "field": "label_text", "type": "nominal" },
"color": {
"field": "suborder",
"type": "nominal",
"scale": { "scheme": "tableau10" },
"legend": null
}
}
}
]
}
Ulteriori specifiche delle carte
Le specifiche seguenti mostrano grafici che non sono disponibili come tipi di visualizzazione predefiniti. Per altri esempi, vedere le raccolte di esempi diVega-Lite.
Grafico puntato
Definire categoryField, currentField, paceFielde targetField nella sezione Campi .
Specifica di JSON
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"width": "container",
"height": "container",
"data": { "name": "databricks_query" },
"config": {
"autosize": { "type": "fit", "contains": "padding" }
},
"transform": [
{
"fold": ["targetField", "paceField", "currentField"],
"as": ["measure_name", "measure_value"]
},
{
"calculate": "toNumber(datum.measure_value)",
"as": "measure_value"
},
{
"calculate": "{ \"targetField\": \"Target\", \"paceField\": \"Pace\", \"currentField\": \"Current\" }[datum.measure_name]",
"as": "measure_label"
},
{
"calculate": "indexof([\"Target\", \"Pace\", \"Current\"], datum.measure_label)",
"as": "measure_order"
}
],
"layer": [
{
"mark": "bar",
"params": [
{
"name": "legend_click",
"select": { "type": "point", "fields": ["measure_label"] },
"bind": "legend"
}
],
"encoding": {
"color": { "field": "measure_label" },
"opacity": { "value": 0 }
}
},
{
"transform": [{ "filter": { "param": "legend_click" } }],
"layer": [
{
"layer": [
{
"mark": { "type": "bar", "tooltip": true },
"encoding": { "color": { "field": "measure_label", "legend": null } },
"transform": [{ "filter": { "field": "measure_label", "oneOf": ["Pace"] } }]
},
{
"mark": { "type": "bar", "height": 7, "tooltip": true },
"encoding": { "color": { "field": "measure_label", "legend": null } },
"transform": [{ "filter": { "field": "measure_label", "oneOf": ["Current"] } }]
},
{
"mark": { "type": "tick", "tooltip": true, "thickness": 3 },
"encoding": { "color": { "field": "measure_label", "legend": null } },
"transform": [{ "filter": { "field": "measure_label", "oneOf": ["Target"] } }]
}
],
"encoding": {
"x": {
"field": "measure_value",
"type": "quantitative",
"stack": null,
"title": "Value",
"axis": { "orient": "bottom" }
},
"color": {
"scale": {
"domain": ["Target", "Pace", "Current"],
"range": ["#000000", "#bcbcbc", "#A66BBF"]
}
},
"order": {
"field": "measure_order",
"type": "quantitative",
"sort": "descending"
}
}
}
],
"encoding": {
"y": {
"field": "categoryField",
"type": "ordinal",
"title": "Category",
"axis": { "labelOverlap": true }
},
"tooltip": [
{ "field": "categoryField", "type": "nominal", "title": "Category" },
{ "field": "currentField", "type": "quantitative", "title": "Current" },
{ "field": "paceField", "type": "quantitative", "title": "Pace" },
{ "field": "targetField", "type": "quantitative", "title": "Target" }
]
}
}
]
}
Misuratore
Definire $valueField e $totalField nella sezione Campi .
Specifica di JSON
{
"$schema": "https://vega.github.io/schema/vega-lite/v6.json",
"width": "container",
"height": "container",
"data": { "name": "databricks_query" },
"config": {
"concat": { "spacing": 0 },
"autosize": { "type": "fit", "contains": "padding" }
},
"params": [
{ "name": "ring_max", "expr": "min(width, height) / 2 - 16" },
{ "name": "ring_width", "expr": "max(12, (min(width, height) / 2) * 0.12)" },
{ "name": "ring_gap", "expr": "max(4, (min(width, height) / 2) * 0.03)" },
{ "name": "label_color", "value": "#000000" },
{ "name": "ring_background_opacity", "value": 0.3 },
{ "name": "ring0_percent", "value": 100 },
{ "name": "ring0_outer", "expr": "ring_max + 2" },
{ "name": "ring0_inner", "expr": "ring_max + 1" },
{ "name": "ring1_outer", "expr": "ring0_inner - ring_gap" },
{ "name": "ring1_inner", "expr": "ring1_outer - ring_width" },
{ "name": "ring1_middle", "expr": "(ring1_outer + ring1_inner) / 2" },
{ "name": "arc_size", "expr": "220" }
],
"transform": [
{ "as": "ratio", "calculate": "datum['$valueField'] / datum['$totalField']" },
{ "as": "_arc_start_degrees", "calculate": "360 - ( arc_size / 2 )" },
{ "as": "_arc_end_degrees", "calculate": "0 + ( arc_size / 2 )" },
{ "as": "_arc_start_radians", "calculate": "2 * 3.14 * ( datum['_arc_start_degrees'] - 360 ) / 360" },
{ "as": "_arc_end_radians", "calculate": "2 * 3.14 * datum['_arc_end_degrees'] / 360" },
{ "as": "_arc_total_radians", "calculate": "datum['_arc_end_radians'] - datum['_arc_start_radians']" },
{ "as": "_ring_start_radians", "calculate": "datum['_arc_start_radians']" },
{
"as": "_ring_end_radians",
"calculate": "datum['_arc_start_radians'] + ( datum['_arc_total_radians'] * datum['ratio'] )"
}
],
"layer": [
{
"mark": {
"type": "arc",
"color": "lightgrey",
"theta": { "expr": "datum['_arc_start_radians']" },
"radius": { "expr": "ring1_outer" },
"theta2": { "expr": "datum['_arc_end_radians']" },
"radius2": { "expr": "ring1_inner" },
"cornerRadius": 10
}
},
{
"name": "RING",
"mark": {
"type": "arc",
"theta": { "expr": "datum['_ring_start_radians']" },
"radius": { "expr": "ring1_outer" },
"theta2": { "expr": "datum['_ring_end_radians']" },
"radius2": { "expr": "ring1_inner" },
"cornerRadius": 10
},
"encoding": {
"color": {
"value": "#307E31",
"condition": [
{ "test": "datum['ratio'] < 0.33", "value": "#880808" },
{ "test": "datum['ratio'] < 0.66", "value": "#E49B0F" }
]
}
}
},
{
"mark": { "type": "text", "fontSize": 40 },
"encoding": {
"text": { "field": "$valueField" },
"color": {
"value": "#307E31",
"condition": [
{ "test": "datum['ratio'] < 0.33", "value": "#880808" },
{ "test": "datum['ratio'] < 0.66", "value": "#E49B0F" }
]
}
}
}
]
}
Grafico radar
Definire $key e $value nella sezione Campi .
Specifica di JSON
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"width": "container",
"height": "container",
"config": {
"autosize": { "type": "fit", "contains": "padding" }
},
"data": { "name": "databricks_query" },
"transform": [
{ "window": [{ "op": "row_number", "as": "category" }] },
{ "calculate": "datum.category - 1", "as": "category" },
{
"joinaggregate": [
{ "op": "count", "as": "numCategories" },
{ "op": "max", "field": "$value", "as": "maxValue" }
]
},
{ "calculate": "2 * PI * datum.category / datum.numCategories", "as": "angle" },
{ "calculate": "100 * datum['$value'] / datum.maxValue", "as": "r" },
{ "calculate": "datum.r * cos(datum.angle)", "as": "x" },
{ "calculate": "datum.r * sin(datum.angle)", "as": "y" },
{ "calculate": "110 * cos(datum.angle)", "as": "label_x" },
{ "calculate": "110 * sin(datum.angle)", "as": "label_y" }
],
"layer": [
{
"transform": [
{ "joinaggregate": [{ "op": "count", "as": "numCategories" }] },
{ "aggregate": [{ "op": "max", "field": "numCategories", "as": "numCategories" }] },
{ "calculate": "[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]", "as": "cats" },
{ "flatten": ["cats"], "as": ["cat"] },
{ "filter": "datum.cat <= datum.numCategories" },
{ "calculate": "2 * PI * datum.cat / datum.numCategories", "as": "angle" },
{ "calculate": "100 * cos(datum.angle)", "as": "x" },
{ "calculate": "100 * sin(datum.angle)", "as": "y" }
],
"mark": { "type": "line", "color": "#ddd", "strokeWidth": 1 },
"encoding": {
"x": { "field": "x", "type": "quantitative", "scale": { "domain": [-120, 120] }, "axis": null },
"y": { "field": "y", "type": "quantitative", "scale": { "domain": [-120, 120] }, "axis": null },
"order": { "field": "cat" }
}
},
{
"transform": [
{ "joinaggregate": [{ "op": "count", "as": "numCategories" }] },
{ "aggregate": [{ "op": "max", "field": "numCategories", "as": "numCategories" }] },
{ "calculate": "[20,40,60,80,100]", "as": "levels" },
{ "flatten": ["levels"], "as": ["level"] },
{ "calculate": "[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]", "as": "cats" },
{ "flatten": ["cats"], "as": ["cat"] },
{ "filter": "datum.cat <= datum.numCategories" },
{ "calculate": "2 * PI * datum.cat / datum.numCategories", "as": "angle" },
{ "calculate": "datum.level", "as": "r" },
{ "calculate": "datum.r * cos(datum.angle)", "as": "x" },
{ "calculate": "datum.r * sin(datum.angle)", "as": "y" }
],
"mark": { "type": "line", "color": "#ddd", "strokeWidth": 1 },
"encoding": {
"x": { "field": "x", "type": "quantitative" },
"y": { "field": "y", "type": "quantitative" },
"detail": { "field": "level" },
"order": { "field": "cat" }
}
},
{
"mark": { "type": "line", "color": "#9467bd", "strokeWidth": 2, "interpolate": "linear-closed" },
"encoding": {
"x": { "field": "x", "type": "quantitative" },
"y": { "field": "y", "type": "quantitative" },
"order": { "field": "category" }
}
},
{
"mark": { "type": "point", "filled": true, "size": 50, "color": "#9467bd" },
"encoding": {
"x": { "field": "x", "type": "quantitative" },
"y": { "field": "y", "type": "quantitative" }
}
},
{
"mark": { "type": "text", "fontSize": 14, "fontWeight": "bold" },
"encoding": {
"x": { "field": "label_x", "type": "quantitative" },
"y": { "field": "label_y", "type": "quantitative" },
"text": { "field": "$key", "type": "nominal" }
}
}
],
"view": { "stroke": null }
}
Grafico radiale
Definire $valueField e $colorField nella sezione Campi .
Specifica di JSON
{
"$schema": "https://vega.github.io/schema/vega-lite/v6.json",
"width": "container",
"height": "container",
"config": {
"autosize": { "type": "fit", "contains": "padding" }
},
"data": { "name": "databricks_query" },
"transform": [
{
"aggregate": [{ "op": "sum", "field": "$valueField", "as": "total" }],
"groupby": ["$colorField"]
},
{
"window": [{ "op": "rank", "as": "rank" }],
"sort": [{ "field": "total", "order": "descending" }]
}
],
"layer": [
{
"mark": { "type": "arc", "innerRadius": 20, "stroke": "#fff" }
}
],
"encoding": {
"theta": {
"field": "total",
"type": "quantitative",
"scale": { "type": "sqrt" },
"stack": true,
"sort": "descending"
},
"radius": { "field": "total", "scale": { "type": "sqrt", "zero": true } },
"color": {
"field": "$colorField",
"type": "nominal",
"title": "Sub-Category",
"sort": { "field": "total", "order": "descending" },
"legend": { "orient": "right" }
},
"tooltip": [
{ "field": "$colorField", "type": "nominal", "title": "Sub-Category" },
{ "field": "total", "type": "quantitative", "title": "Sales" }
]
},
"view": { "stroke": null }
}
Grafico a raggi di sole
Definire outerGroupField, innerGroupFielde sizeField nella sezione Campi .
Specifica di JSON
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"width": "container",
"height": "container",
"data": { "name": "databricks_query" },
"config": {
"autosize": { "type": "fit", "contains": "padding" }
},
"transform": [
{ "calculate": "datum['outerGroupField']", "as": "OUTSIDE" },
{ "calculate": "datum['innerGroupField']", "as": "INSIDE" },
{ "calculate": "datum.OUTSIDE + '-' + datum.INSIDE", "as": "OUT_IN" },
{ "calculate": "toNumber(datum['sizeField'])", "as": "SIZE" }
],
"resolve": {
"scale": { "color": "independent" },
"legend": { "color": "independent" }
},
"layer": [
{
"mark": {
"type": "arc",
"tooltip": true,
"innerRadius": { "expr": "min(width, height)/9" },
"outerRadius": { "expr": "min(width, height)/3" }
},
"encoding": {
"theta": { "field": "SIZE", "type": "quantitative", "stack": true },
"color": {
"field": "OUT_IN",
"type": "ordinal",
"sort": "ascending",
"title": "Inner Grouping",
"scale": {
"range": [
"#1DF9B9",
"#1DE5B9",
"#1DD1B9",
"#1DBDB9",
"#1DA9B9",
"#3DF23B",
"#3DDA3B",
"#3DC23B",
"#3DAA3B",
"#3D923B"
]
}
},
"order": { "field": "OUT_IN", "sort": "ascending" },
"tooltip": [
{ "field": "OUTSIDE", "type": "nominal", "title": "Outer Grouping" },
{ "field": "INSIDE", "type": "nominal", "title": "Inner Grouping" },
{ "field": "SIZE", "type": "quantitative", "title": "Count" }
]
}
},
{
"transform": [
{
"aggregate": [{ "op": "sum", "field": "SIZE", "as": "total_users" }],
"groupby": ["OUTSIDE"]
}
],
"mark": {
"type": "arc",
"tooltip": true,
"innerRadius": { "expr": "min(width, height)/3" }
},
"encoding": {
"theta": {
"field": "total_users",
"type": "quantitative",
"stack": true,
"sort": "ascending",
"title": "Users Count"
},
"color": {
"field": "OUTSIDE",
"type": "ordinal",
"sort": "ascending",
"title": "Outer Grouping",
"scale": { "range": ["#1DD1B9", "#3DC23B"] }
},
"order": { "field": "OUTSIDE", "sort": "ascending" },
"tooltip": [
{ "field": "OUTSIDE", "type": "nominal", "title": "Outer Grouping" },
{ "field": "total_users", "type": "quantitative", "title": "Count" }
]
}
}
]
}
Limitations
- I grafici mappa ad albero non sono supportati. Vega-Lite non supporta le mappe ad albero.
- I marcatori immagine supportano solo URL di immagini base64 inline
data:(ad esempio,data:image/png;base64,...) di 37 KB o inferiori, in formato PNG, JPEG o WebP. Gli URL delle immagini remote (https:ohttp:), gli URL relativi, le immagini SVG e gli URL di immagini basate su campi o espressioni non sono supportati.