Skip to content

A modern, high-performance JavaScript charting library optimized for financial and economic data visualization. Built specifically to replace multiple charting libraries in the VisionKernel platform.

License

Notifications You must be signed in to change notification settings

VisionKernel/VisionCharts

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

VisionCharts

A modern, high-performance JavaScript charting library optimized for financial and economic data visualization.

Version License

✨ Features

πŸš€ Multi-Renderer Architecture

  • Canvas 2D for standard datasets (< 50K points)
  • WebGL for large datasets (50K+ points) with GPU acceleration
  • SVG fallback for maximum compatibility
  • Automatic renderer selection based on data size and browser capabilities

πŸ“Š Chart Types

  • Line Charts with customizable curves (linear, step, cardinal, monotone) and area fill capability
  • Bar Charts with grouped and stacked options
  • Panel Views for multi-dataset comparative analysis

πŸ“ˆ Technical Analysis

  • Moving Averages: Simple (SMA) and Exponential (EMA)
  • Bollinger Bands with configurable periods and standard deviations
  • Statistical Lines: Zero line, average line, median line
  • Recession Indicators with customizable periods and styling

🎨 Visual Components

  • Interactive Crosshairs with data point tooltips
  • Dynamic Legends with dataset management
  • Ending Labels for latest values
  • Grid System with major/minor lines
  • Custom Color Palettes with color picker integration

⚑ Performance & Compatibility

  • Browser Support Detection with capability reporting
  • Coordinate System Normalization across all renderers
  • Data Processing Pipeline with caching and optimization
  • Path Generation with curve smoothing and interpolation
  • Memory Management with efficient resource cleanup

πŸš€ Quick Start

Installation

# Via npm
npm install visioncharts

# Via CDN
<script type="module" src="https://unpkg.com/visioncharts@latest/dist/visioncharts.esm.js"></script>

Basic Usage

import { LineChart } from 'visioncharts';

// Create a line chart
const chart = new LineChart({
  container: '#my-chart',
  data: [{
    id: 'dataset-1',
    name: 'Stock Price',
    color: '#1468a8',
    data: [
      { x: new Date('2024-01-01'), y: 100 },
      { x: new Date('2024-01-02'), y: 105 },
      { x: new Date('2024-01-03'), y: 98 }
    ]
  }],
  options: {
    title: 'Stock Performance',
    xAxisName: 'Date',
    yAxisName: 'Price ($)',
    width: 800,
    height: 400
  }
});

// Render the chart
await chart.render();

Advanced Example with Technical Indicators

import { LineChart } from 'visioncharts';

const chart = new LineChart({
  container: '#advanced-chart',
  data: [/* your time series data */],
  options: {
    title: 'Advanced Financial Chart',
    showRecessionLines: true,
    isLogarithmic: false,
    margin: { top: 40, right: 60, bottom: 60, left: 80 }
  }
});

await chart.render();

// Add technical indicators
chart.addStudy('sma', {
  name: 'SMA (20)',
  period: 20,
  color: '#FF6B35',
  strokeWidth: 2
});

chart.addStudy('bollinger', {
  name: 'Bollinger Bands',
  period: 20,
  standardDeviations: 2,
  color: '#9C27B0'
});

πŸ“š API Reference

Core Classes

Chart (Base Class)

// Initialize
const chart = new Chart(config);

// Configuration methods
chart.addDataset(dataset);
chart.removeDataset(datasetId);
chart.updateDataset(datasetId, updates);

// Rendering
await chart.render();
chart.update();
chart.resize(width, height);

// Interaction
chart.toggleLogarithmicScale(enabled);
chart.toggleRecessionLines(enabled);
chart.toggleZeroLine(enabled);

LineChart

const lineChart = new LineChart({
  container: '#chart',
  data: datasets,
  options: {
    // Line-specific options
    curve: 'monotone', // 'linear', 'step', 'cardinal', 'monotone'
    fillArea: false,
    fillOpacity: 0.3
  }
});

BarChart

const barChart = new BarChart({
  container: '#chart',
  data: datasets,
  options: {
    // Bar-specific options
    barWidth: 0.8,
    groupPadding: 0.1,
    showValues: true
  }
});

Technical Studies

Adding Studies

// Simple Moving Average
const smaId = chart.addStudy('sma', {
  name: 'SMA (50)',
  datasetId: 'dataset-1',
  parameters: { period: 50 },
  color: '#34A853',
  strokeWidth: 2,
  visible: true
});

// Exponential Moving Average  
const emaId = chart.addStudy('ema', {
  name: 'EMA (20)',
  datasetId: 'dataset-1',
  parameters: { period: 20 },
  color: '#EA4335',
  strokeWidth: 2,
  visible: true
});

// Bollinger Bands
const bollingerId = chart.addStudy('bollinger', {
  name: 'Bollinger Bands',
  datasetId: 'dataset-1',
  parameters: { 
    period: 20,
    standardDeviations: 2 
  },
  color: '#9C27B0',
  strokeWidth: 1,
  visible: true
});

Managing Studies

// Update study parameters
chart.updateStudy(studyId, {
  parameters: { period: 30 },
  color: '#FF5722'
});

// Remove study
chart.removeStudy(studyId);

// Get all studies
const studies = chart.getAllStudies();

// Get visible studies only
const visibleStudies = chart.getVisibleStudies();

Data Format

Dataset Structure

const dataset = {
  id: 'unique-id',           // Required: Unique identifier
  name: 'Display Name',      // Required: Human-readable name
  color: '#1468a8',          // Required: Chart color
  data: [                    // Required: Array of data points
    { 
      x: Date | number,      // X-axis value (timestamp or number)
      y: number              // Y-axis value
    }
  ],
  
  // Optional properties
  fill: false,               // Enable area fill (LineChart only)
  fillOpacity: 0.3,         // Fill opacity (0-1)
  strokeWidth: 2,           // Line width
  strokeOpacity: 1,         // Line opacity (0-1)
  visible: true,            // Dataset visibility
  interpolation: 'linear'   // Curve interpolation method
};

Time Series Data

// Preferred format for financial data
const timeSeriesData = [
  { x: new Date('2024-01-01T09:30:00'), y: 150.25 },
  { x: new Date('2024-01-01T09:31:00'), y: 151.10 },
  { x: new Date('2024-01-01T09:32:00'), y: 149.85 }
];

// Also supports timestamps
const timestampData = [
  { x: 1704110400000, y: 150.25 },  // milliseconds since epoch
  { x: 1704110460000, y: 151.10 },
  { x: 1704110520000, y: 149.85 }
];

Configuration Options

Chart Options

const options = {
  // Dimensions
  width: 800,
  height: 400,
  margin: { top: 40, right: 60, bottom: 60, left: 80 },
  
  // Content
  title: 'Chart Title',
  xAxisName: 'Date',
  yAxisName: 'Value',
  
  // Data processing
  xField: 'x',              // X data field name
  yField: 'y',              // Y data field name  
  xType: 'time',            // 'time', 'number', 'category'
  yType: 'number',          // Data type for Y axis
  
  // Visualization
  isLogarithmic: false,     // Enable logarithmic Y scale
  showGrid: true,           // Show grid lines
  showLegend: true,         // Show legend
  showRecessionLines: false,// Show recession indicators
  
  // Styling
  titleFontSize: 16,
  titleFontFamily: 'Arial, sans-serif',
  titleColor: '#333333',
  backgroundColor: 'white',
  
  // Advanced
  enableCrosshair: true,    // Enable crosshair interaction
  enableZoom: true,         // Enable zoom/pan
  enableTooltips: true,     // Enable data tooltips
  animationDuration: 300    // Animation duration (ms)
};

🎨 Styling & Themes

Custom Colors

// Define custom color palette
const customPalette = [
  '#FF6B6B', '#4ECDC4', '#45B7D1', 
  '#96CEB4', '#FECA57', '#FF9FF3'
];

// Apply to datasets
datasets.forEach((dataset, index) => {
  dataset.color = customPalette[index % customPalette.length];
});

CSS Customization

/* Override default styles */
.visioncharts-container {
  border: 1px solid #e0e0e0;
  border-radius: 8px;
}

.visioncharts-title {
  font-family: 'Helvetica Neue', sans-serif;
  font-weight: 300;
}

.visioncharts-legend-item {
  cursor: pointer;
  transition: opacity 0.2s ease;
}

.visioncharts-crosshair-line {
  stroke-dasharray: 3,3;
}

πŸ”§ Browser Support

VisionCharts automatically detects browser capabilities and selects the optimal renderer:

Browser Canvas 2D WebGL SVG Notes
Chrome 60+ βœ… βœ… βœ… Full support
Firefox 55+ βœ… βœ… βœ… Full support
Safari 12+ βœ… βœ… βœ… Full support
Edge 79+ βœ… βœ… βœ… Full support
IE 11 βœ… ❌ βœ… Limited (no WebGL)

Capability Detection

import { browserSupport } from 'visioncharts';

// Check browser capabilities
const capabilities = browserSupport.getSupportSummary();
console.log('Canvas 2D:', capabilities.canvas2d);
console.log('WebGL:', capabilities.webgl);
console.log('High DPI:', capabilities.isHighDPI);

// Get recommended renderer for dataset size
const renderer = browserSupport.suggestRenderer(dataPointCount);
console.log(`Recommended renderer: ${renderer}`);

πŸ“Š Performance Guidelines

Dataset Size Recommendations

Data Points Recommended Renderer Expected Performance
< 1,000 SVG or Canvas 2D Excellent
1,000 - 10,000 Canvas 2D Very Good
10,000 - 50,000 Canvas 2D Good
50,000+ WebGL Excellent

Optimization Tips

// For large datasets, use WebGL
const chart = new LineChart({
  container: '#chart',
  data: largeDataset,
  options: {
    preferredRenderer: 'webgl',  // Force WebGL
    enableDataSampling: true,    // Sample data for better performance
    maxDataPoints: 100000        // Limit maximum points
  }
});

// Pre-process data for better performance
const processedData = chart.dataProcessor.processData(rawData, {
  removeOutliers: true,
  interpolateGaps: true,
  downsample: true,
  targetPoints: 10000
});

πŸ› οΈ Development

Project Structure

visioncharts/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ core/                # Core chart classes
β”‚   β”‚   β”œβ”€β”€ Chart.js         # Base chart class
β”‚   β”‚   β”œβ”€β”€ Axis.js          # Axis rendering
β”‚   β”‚   └── Scale.js         # Scale management
β”‚   β”œβ”€β”€ charts/              # Chart implementations
β”‚   β”‚   β”œβ”€β”€ LineChart.js     # Line/area charts
β”‚   β”‚   └── BarChart.js      # Bar charts
β”‚   β”œβ”€β”€ components/          # Reusable components
β”‚   β”‚   β”œβ”€β”€ Legend.js        # Legend component
β”‚   β”‚   β”œβ”€β”€ Grid.js          # Grid system
β”‚   β”‚   └── Crosshair.js     # Crosshair interaction
β”‚   β”œβ”€β”€ renderers/           # Rendering backends
β”‚   β”‚   β”œβ”€β”€ CanvasRenderer.js# Canvas 2D renderer
β”‚   β”‚   └── WebGLRenderer.js # WebGL renderer
β”‚   β”œβ”€β”€ utils/               # Utility modules
β”‚   β”‚   β”œβ”€β”€ DataProcessor.js # Data processing
β”‚   β”‚   β”œβ”€β”€ PathGenerator.js # Path generation
β”‚   β”‚   └── BrowserSupport.js# Browser detection
β”‚   └── index.js             # Main export
└── examples/                # Demo and examples
    β”œβ”€β”€ index.html           # Interactive demo
    β”œβ”€β”€ scripts/             # Demo script
    β”œβ”€β”€ styles/              # Demo page style
	└── data/ 				 # Sample JSON data

Building from Source

# Clone the repository
git clone https://github.com/visionkernel/visioncharts.git
cd visioncharts

# Install dependencies
npm install

# Build the library
npm run build

# Run development server
npm run dev

🀝 Community & Support

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.


VisionCharts v2.0.0 | Β© 2025 VisionKernel Team

About

A modern, high-performance JavaScript charting library optimized for financial and economic data visualization. Built specifically to replace multiple charting libraries in the VisionKernel platform.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •