LineChart
Trace la serie de datos con valores reales de x/y como una curva. Adecuado para tendencias como velocidad y tiempo, admite rangos de coordenadas, ejes y etiquetas; Los valores y faltantes romperán los segmentos de línea.
Ejemplo
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 }}
/>
);
}
Uso
- value.x/y sitúa muestras; label.x/y solo aporta texto. No ordena por x; y=null corta la línea. Un gráfico temporal móvil actualiza data y rangeX, por ejemplo [segundosActuales−30,segundosActuales].
- $data.history contiene 30 segundos, de antiguos a nuevos, quizá vacío o con ausencias. timestamp usa milisegundos; elapsed, segundos. Conserva cortes null y usa elapsed.value, no índices, para el tiempo.
- rangeX/rangeY limita números, no etiquetas. Ocultar etiquetas no oculta ejes; usa stroke="clear" por separado. El motor evita solapamientos, por lo que activar etiquetas no garantiza mostrarlas todas.
- contentAnimation cambia texto, imágenes o datos estructurados. interpolate requiere puntos/closed de Polyline, secuencia Path o muestras compatibles. Los cambios de estructura se aplican inmediatamente.
Propiedades
dataReadonlyArray<ChartDataPoint>Datos del gráfico. value.x/y define coordenadas y label.x/y el texto; y nulo interrumpe la línea.
[{value: {x: 0, y: 12}, label: {x: "0s", y: "12"}}, {value: {x: 10, y: 24}, label: {x: "10s", y: "24"}}]rangeX?ChartRangeRango numérico visible [min, max]. Si se omite, se ajusta a los datos.
[0, 30]rangeY?ChartRangeRango numérico visible [min, max]. Si se omite, se ajusta a los datos.
[0, 100]showXLabels?booleanMostrar etiquetas del eje. El diseño nativo selecciona un subconjunto sin superposiciones.
trueshowYLabels?booleanMostrar etiquetas del eje. El diseño nativo selecciona un subconjunto sin superposiciones.
truexAxis?ChartAxisStyleLínea horizontal en la parte inferior del gráfico. Por defecto usa primer plano y ancho 1pt; stroke: clear la oculta.
{stroke: HDR($env.foreground), lineWidth: 1}yAxis?ChartAxisStyleLínea vertical a la izquierda del gráfico. Por defecto usa primer plano y ancho 1pt; stroke: clear la oculta.
{stroke: HDR($env.foreground), lineWidth: 1}stroke?PaintColor o degradado del trazo; clear lo oculta.
HDR($env.dark ? "white" : "black")lineWidth?numberGrosor del trazo en puntos; 0 no dibuja trazo.
2lineCap?"round" | "butt" | "square"Extremos: butt corta, square prolonga en cuadrado, round redondea.
"round"lineJoin?"round" | "miter" | "bevel"Unión de segmentos: miter, round o bevel.
"round"dash?number[]Longitudes alternas de trazo y hueco en puntos; matriz vacía para línea continua.
[]dashPhase?numberDesplazamiento del patrón de guiones en puntos.
0contentAnimation?ContentAnimationTransición opcional. interpolate requiere igual número de muestras y posiciones de datos ausentes; de lo contrario, actualiza inmediatamente.
{type: "interpolate", duration: 0.25}Propiedades comunes
width?number | "auto" | "fill"Anchura en puntos, tamaño automático o relleno del contenedor.
"fill"height?number | "auto" | "fill"Altura en puntos, tamaño automático o relleno del contenedor.
"fill"x?numberDesplazamiento visual en puntos: x a la derecha, y hacia abajo, sin cambiar el espacio del diseño.
0y?numberDesplazamiento visual en puntos: x a la derecha, y hacia abajo, sin cambiar el espacio del diseño.
0transform?ViewTransformTransformación global sin alterar el diseño. Traslación en puntos, giro/inclinación en grados, escala 1 sin cambios, anclajes 0–1.
{rotation: 0}opacity?numberOpacidad de todo el View: 0 transparente, 1 opaco.
1clipped?booleanRecorta el dibujo que sobresale de los límites del View.
falseclip?"rectangle" | "ellipse"Recorte rectangle o ellipse; Material también admite false para desactivarlo.
"rectangle"mask?View | nullView de máscara alfa. Centrada sin afectar al diseño; null desactiva la máscara.
<Circle width="fill" height="fill" background="white"/>zIndex?numberOrden entre elementos hermanos; los valores mayores aparecen delante.
0blur?numberRadio de desenfoque en puntos; 0 lo desactiva.
4innerShadow?DrawingEffectColor, opacidad, radio de desenfoque y desplazamiento x/y del efecto; distancias en puntos.
{color: HDR("black"), opacity: 0.5, radius: 4, x: 0, y: 2}glow?DrawingEffectColor, opacidad, radio de desenfoque y desplazamiento x/y del efecto; distancias en puntos.
{color: HDR("cyan"), radius: 8, opacity: 0.8}shadowColor?ColorColor de la sombra exterior.
HDR("black")shadowOpacity?numberOpacidad de la sombra de 0 a 1; 0 la oculta.
0shadowRadius?numberRadio de desenfoque de la sombra, en puntos.
4shadowX?numberDesplazamiento de sombra en puntos: x derecha, y abajo.
0shadowY?numberDesplazamiento de sombra en puntos: x derecha, y abajo.
2animations?LineChartAnimation[]Anima cambios de propiedad. duration/delay en segundos; from/to son extremos; repeat/autoreverse controlan repeticiones y wrap el período.
[{property: "opacity", duration: 0.25, curve: "easeInOut"}]key?string | numberIdentidad estable entre elementos hermanos.
Ejemplo práctico
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' }}
/>
);
}
Animación
widthheightxyopacityblurshadowColorshadowOpacityshadowRadiusshadowXshadowYstrokelineWidthdashPhasetransform.translateXtransform.translateYtransform.scaleXtransform.scaleYtransform.rotationtransform.skewXtransform.skewYtransform.anchorXtransform.anchorYrangeX.0rangeX.1rangeY.0rangeY.1xAxis.lineWidthxAxis.dashPhaseyAxis.lineWidthyAxis.dashPhasexAxis.strokeyAxis.strokeAl omitir
La tabla documenta omisiones comprobadas en la implementación. Los ejemplos no son valores predeterminados. Especifica valores para resultados fijos; tamaños y colores del contexto no son constantes.
| Propiedades | Al omitir |
|---|---|
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 } |