Referencia

Avanzado

Extiende KatuCharts con series personalizadas y módulos, transmite datos en vivo, maneja conjuntos de datos muy grandes y accede a los bloques de construcción internos.

Sistema de plugins

Tipos de series personalizadas

Subclasifica BaseSeries, dibuja dentro de render(), y registra la clase con SeriesRegistry.

import KatuCharts, { BaseSeries, SeriesRegistry } from 'katucharts.js';

class MyCustomSeries extends BaseSeries {
  render() {
    const { plotArea, xAxis, yAxis } = this.context;
    this.context.chartGroup
      .selectAll('circle.custom-point')
      .data(this.processData())
      .join('circle')
      .attr('cx', d => xAxis.getPixelForValue(d.x) + plotArea.x)
      .attr('cy', d => yAxis.getPixelForValue(d.y) + plotArea.y)
      .attr('r', 6)
      .attr('fill', this.context.colors[this.context.colorIndex]);
  }
}

SeriesRegistry.registerType('mycustom', MyCustomSeries);
KatuCharts.chart(container, { series: [{ type: 'mycustom', data: [{ x: 1, y: 10 }] }] });

Registro de módulos

Agrupa múltiples extensiones en un módulo con un método init(KC) y actívalo con KatuCharts.use().

const myModule = {
  init(KC) {
    KC.SeriesRegistry.registerType('mycustom', MyCustomSeries);
    KC.SeriesRegistry.registerType('mycustom2', MyOtherSeries);
  }
};
KatuCharts.use(myModule);

Puntos de extensión de BaseSeries

MétodoDescripción
render()Método de dibujo principal — debe sobrescribirse.
init(context)Se llama una vez al crear; recibe SeriesContext.
processData()Normaliza datos de opciones sin procesar al formato de renderizado.
animateUpdate(duration)Transición personalizada cuando los datos cambian.
getDataExtents()Retorna { xMin, xMax, yMin, yMax } para auto-escala de eje.
getCategories()Retorna string[] cuando la serie impulsa un eje de categoría.
setVisible(visible, animated?)Muestra/oculta la serie.
destroy()Limpia DOM y listeners al eliminar.

SeriesContext

PropiedadTipoDescripción
plotArea{ x, y, width, height }Región dibujable dentro de los márgenes.
xAxis / yAxisAxisInstanceEjes resueltos; getPixelForValue(v) mapea datos → píxeles.
colorIndex / colorsnumber / string[]Índice de paleta para esta serie / la paleta completa.
eventsEventBusBus de eventos compartido para componentes.
chartGroupSelectionSelección SVG de <g> de esta serie.
totalSeriesOfType / indexInTypenumberConteo / posición entre series del mismo tipo.
animatebooleanSi las animaciones están habilitadas.

Transmisión en tiempo real

Empuja puntos en vivo en una serie desde tres fuentes. Pasa {{ shift: true }} para mantener una ventana rodante fija; la suscripción retornada tiene unsubscribe().

import { StreamAdapter, UpdateScheduler } from 'katucharts.js';

const sub = StreamAdapter.fromWebSocket(ws, series, parseMessage, { shift: true });
// StreamAdapter.fromEventSource(es, series, 'tick', parseMessage, { shift })
// StreamAdapter.fromPolling(fetchFn, series, 1000, { shift })
sub.unsubscribe();

// Batch many updates into one redraw
UpdateScheduler.batch(() => {
  series.addPoint(p1, false);
  series.addPoint(p2, false);
});

Conjuntos de datos grandes — decimación

Reduce decenas de miles de puntos mientras preservas la forma visual.

import { lttbDecimate, minMaxDecimate } from 'katucharts.js';

// LTTB — keeps the most visually significant point per bucket
const reduced = lttbDecimate(bigDataset, 500);   // 50 000 → 500

// Min/Max — keeps the extremes per bucket (preserves outliers)
const bounds  = minMaxDecimate(bigDataset, 500); // 50 000 → 1 000 (2/bucket)
El gráfico de Manhattan cambia automáticamente a lienzo por encima de ~20k puntos con una superposición SVG interactiva; deshabilita la animación (chart.animation = false) para series muy grandes.

Internos exportados

Clases principales

ExportaciónDescripción
ChartControlador principal — ciclo de vida, renderizado, actualizaciones.
EventBusSistema de eventos pub/sub compartido entre componentes.
SVGRendererCapa de renderizado SVG de bajo nivel.
OptionsParserFusiona opciones del usuario con valores por defecto y valida.
SeriesRegistry / ModuleRegistryRegistro de tipo / rastreador de módulos instalados.
BaseSeriesBase abstracta que todas las series extienden.

Componentes y características

ExportaciónDescripción
Tooltip / Legend / DataLabels / Crosshair / ExportButtonComponentes de interfaz de usuario.
ExportModuleExportación programática PNG/SVG/PDF (PDF necesita jspdf).
ResponsiveEngine / A11yModuleRedimensionamiento de re-render / ARIA + navegación por teclado.
Drilldown / ZoomTransiciones de perforación / zoom de rueda + caja.
Navigator / RangeSelector / DataGroupingCaracterísticas de gráfico bursátil.

Funciones de registro

FunciónRegistra
registerCoreSeriesTypes()línea, área, columnas, dispersión, circular, barras, spline, areaspline, histograma, mapa de calor, cascada, embudo, pirámide, burbujas, boxplot, barra de error, indicador, indicador sólido, polar, veleta
registerFinancialSeriesTypes()velas, ohlc
registerFlowSeriesTypes()sankey, gráfico de red, rueda de dependencias
registerBioSeriesTypes()volcán, manhattan, circos, diagrama de puntos, gráfico de piruleta

Exportaciones de TypeScript

import type {
  KatuChartsOptions, ChartOptions, SeriesOptions, AxisOptions,
  TooltipOptions, LegendOptions, PlotOptions, PointOptions,
  MarkerOptions, DataLabelOptions, SeriesType, PlotArea,
  InternalConfig, ExportingOptions
} from 'katucharts.js';

Utilidades

ExportaciónDescripción
dateFormat(format, timestamp)Formateo de fecha estilo strftime.
numberFormat(value, decimals, decPoint?, thousandsSep?)Formateo de número estilo local.
templateFormat — '{path:spec}'Reemplazo de token con una especificación de formato numérico opcional, por ejemplo {point.y:,.0f}.
parseColor(c)→ { r, g, b, a }.
brighten(c, amount) / setOpacity(c, a)Aclara/oscurece / establece alfa.
getPalette(name) / setGlobalOptions / getGlobalOptionsBúsqueda de paleta / valores por defecto globales.
import { parseColor, brighten, setOpacity, getPalette } from 'katucharts.js';

parseColor('#1f77b4');           // { r: 31, g: 119, b: 180, a: 1 }
brighten('#1f77b4', 0.3);        // '#5da5d5'
setOpacity('#1f77b4', 0.4);      // 'rgba(31,119,180,0.4)'

// Template tokens (tooltip / dataLabels / axis formatters)
'{point.name}: {point.y:,.0f}'   // 'Revenue: 8,900'
'{series.name} — {point.percentage:.1f}%'