LineChart
Traccia la serie di dati con i valori x/y effettivi come una curva. Adatto per tendenze quali velocità e tempo, supporta intervalli di coordinate, assi ed etichette; i valori y mancanti interromperanno i segmenti di linea.
Esempio
function main() {
return (
<LineChart
data={[
{ value: { x: 0, y: 20 }, label: { x: '0s', y: '20' } },
{ value: { x: 10, y: 60 }, label: { x: '10s', y: '60' } },
]}
rangeX={[0, 10]}
rangeY={[0, 100]}
showXLabels={true}
showYLabels={true}
stroke={$env.accent}
xAxis={{ stroke: $env.foreground, lineWidth: 1 }}
/>
);
}
Utilizzo
- value.x/y posiziona; label.x/y fornisce solo testo. Nessun ordinamento per x; y=null interrompe. Un grafico temporale scorrevole aggiorna data e rangeX, ad esempio [secondiAttuali−30,secondiAttuali].
- $data.history contiene 30 secondi, dal meno recente, anche vuoti o mancanti. timestamp usa millisecondi, elapsed secondi. Mantieni interruzioni null e usa elapsed.value, non indici, per il tempo.
- rangeX/rangeY limita numeri, non etichette. Nascondere etichette non elimina assi: usa stroke="clear" separatamente. Il motore evita sovrapposizioni e non garantisce ogni etichetta.
- contentAnimation riguarda testo, immagini o dati strutturati. interpolate richiede punti/closed Polyline, sequenza Path o campioni compatibili. Cambi strutturali aggiornano subito.
Proprietà
dataReadonlyArray<ChartDataPoint>Dati del grafico. value.x/y definisce le coordinate, label.x/y il testo; y null interrompe la linea.
[{value: {x: 0, y: 12}, label: {x: "0s", y: "12"}}, {value: {x: 10, y: 24}, label: {x: "10s", y: "24"}}]rangeX?ChartRangeIntervallo numerico visibile [min, max]. Se omesso, si adatta automaticamente ai dati.
[0, 30]rangeY?ChartRangeIntervallo numerico visibile [min, max]. Se omesso, si adatta automaticamente ai dati.
[0, 100]showXLabels?booleanMostra le etichette dell’asse. Il layout nativo seleziona un sottoinsieme senza sovrapposizioni.
trueshowYLabels?booleanMostra le etichette dell’asse. Il layout nativo seleziona un sottoinsieme senza sovrapposizioni.
truexAxis?ChartAxisStyleAsse orizzontale in basso nel grafico. Predefinito: primo piano, larghezza 1pt; stroke: clear lo nasconde.
{stroke: HDR($env.foreground), lineWidth: 1}yAxis?ChartAxisStyleAsse verticale a sinistra del grafico. Predefinito: primo piano, larghezza 1pt; stroke: clear lo nasconde.
{stroke: HDR($env.foreground), lineWidth: 1}stroke?PaintColore o gradiente del tratto; clear lo nasconde.
HDR($env.dark ? "white" : "black")lineWidth?numberSpessore del tratto in punti; 0 non disegna il tratto.
2lineCap?"round" | "butt" | "square"Estremità: butt taglia, square prolunga in quadrato, round arrotonda.
"round"lineJoin?"round" | "miter" | "bevel"Forma delle giunzioni: miter, round o bevel.
"round"dash?number[]Lunghezze alternate di tratto e spazio in punti; array vuoto per linea continua.
[]dashPhase?numberSpostamento del motivo tratteggiato in punti.
0contentAnimation?ContentAnimationTransizione facoltativa. interpolate richiede lo stesso numero di campioni e posizioni dei valori mancanti; altrimenti aggiorna subito.
{type: "interpolate", duration: 0.25}Proprietà comuni
width?number | "auto" | "fill"Larghezza in punti, dimensione automatica o riempimento del contenitore.
"fill"height?number | "auto" | "fill"Altezza in punti, dimensione automatica o riempimento del contenitore.
"fill"x?numberSpostamento visivo in punti: x a destra, y in basso; non cambia lo spazio nel layout.
0y?numberSpostamento visivo in punti: x a destra, y in basso; non cambia lo spazio nel layout.
0transform?ViewTransformTrasformazione globale senza cambiare il layout. Traslazione in punti, rotazione/inclinazione in gradi, scala 1 invariata, ancoraggi 0–1.
{rotation: 0}opacity?numberOpacità dell’intero View: 0 trasparente, 1 opaco.
1clipped?booleanRitaglia il disegno oltre i limiti del View.
falseclip?"rectangle" | "ellipse"Forma di ritaglio rectangle o ellipse; Material accetta anche false per disattivarlo.
"rectangle"mask?View | nullView per la maschera alfa. Centrata senza modificare il layout; null disattiva la maschera.
<Circle width="fill" height="fill" background="white"/>zIndex?numberOrdine tra elementi fratelli; valori più grandi appaiono davanti.
0blur?numberRaggio della sfocatura in punti; 0 la disattiva.
4innerShadow?DrawingEffectColore, opacità, raggio di sfocatura e offset x/y dell’effetto; distanze in punti.
{color: HDR("black"), opacity: 0.5, radius: 4, x: 0, y: 2}glow?DrawingEffectColore, opacità, raggio di sfocatura e offset x/y dell’effetto; distanze in punti.
{color: HDR("cyan"), radius: 8, opacity: 0.8}shadowColor?ColorColore dell’ombra esterna.
HDR("black")shadowOpacity?numberOpacità dell’ombra 0–1; 0 la nasconde.
0shadowRadius?numberRaggio di sfocatura dell’ombra esterna in punti.
4shadowX?numberOffset dell’ombra in punti: x a destra, y in basso.
0shadowY?numberOffset dell’ombra in punti: x a destra, y in basso.
2animations?LineChartAnimation[]Anima le modifiche alle proprietà. duration/delay in secondi; from/to sono estremi; repeat/autoreverse controllano le ripetizioni, wrap il periodo.
[{property: "opacity", duration: 0.25, curve: "easeInOut"}]key?string | numberIdentità stabile tra elementi fratelli.
Esempio pratico
function main() {
const now = $data.current.elapsed?.value ?? 0;
const data = $data.history
.filter((sample) => sample.elapsed?.value != null)
.map((sample) => ({
value: { x: sample.elapsed.value, y: sample.speed?.value ?? null },
label: {
x: sample.elapsed.value.toFixed(0) + 's',
y: sample.speed?.value == null ? '' : sample.speed.value.toFixed(0),
},
}));
return (
<LineChart
data={data}
rangeX={[now - 30, now]}
rangeY={[0, 160]}
stroke={$env.accent}
xAxis={{ stroke: $env.foreground, lineWidth: 1 }}
yAxis={{ stroke: 'clear' }}
/>
);
}
Animazione
widthheightxyopacityblurshadowColorshadowOpacityshadowRadiusshadowXshadowYstrokelineWidthdashPhasetransform.translateXtransform.translateYtransform.scaleXtransform.scaleYtransform.rotationtransform.skewXtransform.skewYtransform.anchorXtransform.anchorYrangeX.0rangeX.1rangeY.0rangeY.1xAxis.lineWidthxAxis.dashPhaseyAxis.lineWidthyAxis.dashPhasexAxis.strokeyAxis.strokeQuando omesso
La tabella documenta omissioni verificate nell’implementazione. Gli esempi non sono valori predefiniti. Specifica valori per risultati fissi; misure e colori contestuali non sono costanti.
| Proprietà | Quando omesso |
|---|---|
data | [] |
showXLabels | true |
showYLabels | true |
lineWidth | 2 |
stroke | HDR($env.dark ? 'white' : 'black') |
xAxis | { stroke: HDR($env.foreground), lineWidth: 1 } |
yAxis | { stroke: HDR($env.foreground), lineWidth: 1 } |