Gráficos de líneas

Renderice líneas, escalones, rangos, puntos, barras y áreas apiladas a escala.

Inicio rápido por framework

Renderiza el mismo gráfico de líneas de seis formas

Elige la API imperativa de TypeScript o un adaptador ligero. Todas las pestañas usan los mismos datos tipados y opciones.
chart.ts@sixtyfold/line
import { LineChart } from "@sixtyfold/line";

const data = {
  x: new Float64Array([0, 1, 2, 3]),
  y: new Float64Array([3, 7, 4, 9]),
  length: 4,
};

const canvas = document.querySelector<HTMLCanvasElement>("#chart")!;
const chart = new LineChart(canvas, {
  renderMode: "auto",
  axis: { bottom: { format: "time" } },
  series: [{ name: "Signal", color: "#4ecca3" }],
});

await chart.initialize();
chart.setData(data);


window.addEventListener("pagehide", () => chart.destroy(), { once: true });

@sixtyfold/line representa múltiples series frente a una columna X ordenada. Las series pueden usar independientemente la geometría de línea, escalón, rango, dispersión, barra o área apilada mientras comparten ejes, interacción y tooltips.

La configuración exacta y las firmas de los métodos aparecen en la referencia generada Line options, LineChart methods y line data types.

Geometría de la serie

TipoEntradaUso previsto
lineFloat64ArrayObservaciones continuas con interpolación recta o configurada.
step-before, step-after, step-midFloat64ArrayValores que se aplican durante un intervalo. step alias step-after.
range{ low, high, y? }Incertidumbre, mínimo/máximo, percentiles u otro intervalo. band es un alias.
scatterFloat64ArrayPuntos independientes. points es un alias.
barFloat64ArrayValores renderizados desde una línea base configurable. column es un alias.
stacked-areaFloat64ArrayContribuciones ordenadas sumadas en geometría acumulada.

SeriesOptions contiene campos comunes como nombre, color, ancho, unidad, relleno y marcador. Las opciones específicas de geometría residen bajo band, point, bar y stack para que las configuraciones no relacionadas no resulten ambiguas.

Datos de rango

chart.setMultiSeriesData({
  x,
  series: [
    { low: temperatureMin, high: temperatureMax },
    temperatureMean,
  ],
  length: x.length,
  seriesCount: 2,
});

Utilice una serie de media explícita cuando el agregado real no sea (low + high) / 2. Suprima el trazo del centro del rango con un ancho de serie cero y deshabilite los límites con band.borderWidth: 0 cuando solo la envolvente transmita la información deseada.

Nivel de detalle (LOD)

LOD significa nivel de detalle. Permite que el gráfico dibuje una representación del tamaño de la pantalla de un conjunto de datos mucho mayor y luego revele detalles más finos al hacer zoom. La política predeterminada adaptive preserva los extremos ordenados, los extremos locales y las verdaderas brechas NaN. La mayoría de las aplicaciones deberían mantener los valores predeterminados.

La cuadrícula adaptable permanece estable durante la animación y los redibujados no relacionados. Solo cambia después de que los movimientos de zoom continuados se alejen lo suficiente del nivel de detalle actual.

const chart = new LineChart(canvas, {
  lod: {
    mode: "adaptive",
    density: 0.75,
    rebaseRatio: 1.25,
    quantizationStep: 0.25,
  },
});
OpciónPredeterminadoRango aceptadoSignificado
density0.750.25–2Columnas objetivo de presentación por píxel CSS. Más columnas conservan detalle local y cuestan más trabajo.
rebaseRatio1.251.05–2Deriva máxima proyectada de ancho antes de que la cuadrícula adhesiva cambie.
quantizationStep0.250.05–1Intervalo disponible dentro de cada octava binaria. Pasos más pequeños hacen que los cambios de representación sean más finos.

Ajuste rebaseRatio y quantizationStep conjuntamente. Para cambios más suaves, empiece cerca de 1 + quantizationStep, por ejemplo 1.10–1.12 con 0.10. Una banda de rango multipaso visualmente sensible puede beneficiarse de 0.05 y 1.06–1.08; mida el coste en los navegadores objetivo y en las relaciones de píxeles del dispositivo.

Parchee la política sin reconstruir el gráfico ni volver a compilar su jerarquía:

chart.setLODOptions({ density: 0.75, rebaseRatio: 1.12, quantizationStep: 0.1 });

mode: "pyramid" selecciona entre niveles globales preconstruidos de mínimo/máximo. Las áreas apiladas siempre usan esta vía porque reducir cada entrada de forma independiente cambiaría la geometría acumulada.

Visibilidad y apariencia

chart.setSeriesVisible(2, false);
chart.setVisibleSeries([0, 1]);
chart.updateSeriesAppearance(0, { color: "#ffe47a", width: 2 });

chart.setSeriesVisibilityCallback((event) => {
  console.log(event.source, event.visibility);
});

Las devoluciones de llamada de visibilidad identifican cambios que se originan en la inicialización, la API o una leyenda interactiva. legend.allowHideAll controla si la leyenda incorporada puede ocultar la última serie visible.

Transmisión

Después de initialize(), cree un stream de capacidad fija con dimensiones enteras positivas:

chart.initStreaming(2, 1_000_000);
chart.addVector(timestamp, [phaseL1, phaseL2]);

addVector requiere una marca de tiempo finita y un valor por cada serie configurada. Copia los valores escalares antes de encolarlos, de modo que el llamador pueda reutilizar esa matriz inmediatamente. Mantenga las marcas de tiempo en orden ascendente; use NaN para un valor Y faltante, no para una marca de tiempo.

Use addVectors(timestamps, valuesBySeries) para columnas Float64Array existentes. Suministre una columna por cada serie configurada, cada una con la misma longitud que las marcas de tiempo, y marcas de tiempo finitas. La validación termina antes de que las muestras escalares encoladas se vacíen o se transfieran los buffers. Por tanto, una falla de validación deja la cola sin cambios y los buffers del llamador adjuntos.

Los appends escalares y en bloque válidos conservan su orden de llamada. El ring buffer mantiene la visualización cronológica después de que se desborda, y la construcción del LOD puede completarse mientras continúan los appends. Llamar a initStreaming de nuevo descarta las muestras encoladas del stream antiguo. Restablecer el streaming o reemplazar los datos también cancela la animación de viewport pendiente del conjunto de datos anterior.

Sustitución animada

setData y setMultiSeriesData revelan nuevas series de izquierda a derecha cuando la animación está activada. preservePreviousFrame: true mantiene el trazado anterior delante del nuevo límite de revelado. Úselo solo después de que el revelado precedente haya finalizado y restaure la ventana de visualización inmediatamente al reemplazar una vista previa por su conjunto de datos completo.