UNPKG

d3-charts-viz-library

Version:

A comprehensive D3-based chart library with customizable charts and graphs

738 lines (573 loc) 18.6 kB
# D3 Charts Visualization Library A comprehensive, production-ready D3-based chart library with 18+ chart types for creating stunning data visualizations. ## 🚀 Features - 🎯 **18+ Chart Types**: From basic Bar/Line charts to advanced Spiral, Force-Directed, Calendar Heatmap, and Radial Stacked visualizations - 🎨 **Highly Customizable**: Extensive configuration options for colors, animations, and styling - 📱 **Responsive Design**: Charts automatically adapt to container size changes - 🖱️ **Interactive**: Built-in hover effects, tooltips, zoom, and click handlers - 📊 **Smart Data Processing**: Flexible data format support with automatic validation - 🎭 **Smooth Animations**: Beautiful entrance animations, transitions, and particle effects - 🛡️ **Production Ready**: Comprehensive error handling and edge case management - **Performance Optimized**: Efficient rendering with D3.js v7+ under the hood - 🔧 **Framework Agnostic**: Works with React, Vue, Angular, or vanilla JavaScript ## 📦 Installation ```bash npm install d3-charts-viz-library ``` ## 🎮 Interactive Playground Explore all chart types with live examples and interactive controls: ```bash # Clone the repository git clone https://github.com/amtshkumar/chartlibrary.git cd chartlibrary # Install dependencies npm install # Start the playground npm run dev:playground ``` The playground includes: - 📊 Live chart examples with real-time updates - 🎮 Interactive controls for all chart options - 📝 Copy-to-clipboard code examples - 🔄 Data generators for testing different scenarios - 🎨 Visual customization options ## ✨ Key Features ### 🛡️ Production Ready - Comprehensive error handling and validation - Graceful handling of edge cases and invalid data - Memory-efficient rendering with optimized animations - Cross-browser compatibility (Chrome 60+, Firefox 55+, Safari 12+, Edge 79+) ### 🎨 Advanced Animations - Smooth entrance and exit transitions - Physics-based particle systems - Breathing and pulsing effects - Interactive hover states and tooltips ### 📊 Flexible Data Support - Multiple data format compatibility - Automatic data validation and sanitization - Support for time-series, categorical, and network data - Real-time data updates with smooth transitions ## Quick Start ```javascript import { BarChart } from 'd3-charts-viz-library'; // Sample data const data = [ { label: 'A', value: 30 }, { label: 'B', value: 45 }, { label: 'C', value: 25 }, { label: 'D', value: 60 } ]; // Create chart const chart = new BarChart('#chart-container', { width: 800, height: 400, barColor: '#3498db' }); chart.setData(data).render(); ``` ## 📊 Chart Types The library includes 18+ chart types, from basic visualizations to advanced animated charts: ### 📊 Basic Charts #### Bar Chart ```javascript import { BarChart } from 'd3-charts-viz-library'; const barChart = new BarChart('#container', { width: 800, height: 400, barColor: '#3498db', hoverColor: '#2980b9', orientation: 'vertical', // or 'horizontal' showValues: true }); barChart.setData(data).render(); ``` ### Line Chart ```javascript import { LineChart } from 'd3-charts-viz-library'; const lineChart = new LineChart('#container', { width: 800, height: 400, lineColor: '#e74c3c', showPoints: true, showArea: false, curve: d3.curveCardinal }); const lineData = [ { x: 0, y: 10 }, { x: 1, y: 25 }, { x: 2, y: 15 }, { x: 3, y: 30 } ]; lineChart.setData(lineData).render(); ``` ### Pie Chart ```javascript import { PieChart } from 'd3-charts-viz-library'; const pieChart = new PieChart('#container', { width: 600, height: 600, showLabels: true, showPercentages: true }); pieChart.setData(data).render(); ``` ### Donut Chart ```javascript import { DonutChart } from 'd3-charts-viz-library'; const donutChart = new DonutChart('#container', { width: 600, height: 600, innerRadius: 0.5, showCenterText: true, centerText: 'Total: 160' }); donutChart.setData(data).render(); ``` ### Scatter Plot ```javascript import { ScatterPlot } from 'd3-charts-viz-library'; const scatterPlot = new ScatterPlot('#container', { width: 800, height: 400, pointRadius: 5, showTrendLine: true }); const scatterData = [ { x: 10, y: 20, label: 'Point 1' }, { x: 15, y: 35, label: 'Point 2' }, { x: 20, y: 25, label: 'Point 3' } ]; scatterPlot.setData(scatterData).render(); ``` ### Area Chart ```javascript import { AreaChart } from 'd3-charts-viz-library'; const areaChart = new AreaChart('#container', { width: 800, height: 400, areaColor: 'rgba(52, 152, 219, 0.6)', showLine: true, showPoints: false }); areaChart.setData(lineData).render(); ``` ### Histogram ```javascript import { Histogram } from 'd3-charts-viz-library'; const histogram = new Histogram('#container', { width: 800, height: 400, bins: 20, showDensity: true }); const histogramData = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // Raw values histogram.setData(histogramData).render(); ``` ### 🎆 Advanced Charts #### Sankey Chart Flow diagrams showing data movement between nodes. ```javascript import { SankeyChart } from 'd3-charts-viz-library'; const sankeyChart = new SankeyChart('#container', { width: 800, height: 600, nodeWidth: 15, nodePadding: 10 }); const sankeyData = { nodes: [ { name: 'Source A' }, { name: 'Source B' }, { name: 'Target X' }, { name: 'Target Y' } ], links: [ { source: 0, target: 2, value: 10 }, { source: 1, target: 3, value: 15 } ] }; sankeyChart.setData(sankeyData).render(); ``` #### Liquid Fill Chart Animated liquid-filled containers with wave effects. ```javascript import { LiquidFillChart } from 'd3-charts-viz-library'; const liquidChart = new LiquidFillChart('#container', { width: 400, height: 400, liquidColor: '#3498db', showWaves: true, animationDuration: 2000 }); liquidChart.setData({ percentage: 0.75, label: '75%' }).render(); ``` #### Chord Diagram Chart Circular layout showing relationships between entities. ```javascript import { ChordDiagramChart } from 'd3-charts-viz-library'; const chordChart = new ChordDiagramChart('#container', { width: 600, height: 600, innerRadius: 200, outerRadius: 220 }); const matrix = [ [0, 5, 6, 4], [7, 0, 4, 2], [8, 4, 0, 8], [3, 5, 9, 0] ]; chordChart.setData({ matrix, labels: ['A', 'B', 'C', 'D'] }).render(); ``` #### Force Directed Chart Network visualization with physics-based node positioning. ```javascript import { ForceDirectedChart } from 'd3-charts-viz-library'; const forceChart = new ForceDirectedChart('#container', { width: 800, height: 600, showParticles: true, showGlowEffects: true, enableZoom: true }); const networkData = { economicSchedule: [ { remainder: 100000, distribution: 5000 }, { remainder: 110000, distribution: 5500 } ] }; forceChart.setData(networkData).render(); ``` #### Radial Timeline Chart Circular timeline with animated arcs and data points. ```javascript import { RadialTimelineChart } from 'd3-charts-viz-library'; const radialChart = new RadialTimelineChart('#container', { width: 500, height: 500, innerRadius: 40, showGridLines: true, animationDuration: 1000 }); const timelineData = { economicSchedule: [ { remainder: 100000, distribution: 5000 }, { remainder: 110000, distribution: 5500 }, { remainder: 125000, distribution: 6000 } ] }; radialChart.setData(timelineData).render(); ``` #### Flow Containers Chart Animated containers with liquid filling and particle effects. ```javascript import { FlowContainersChart } from 'd3-charts-viz-library'; const flowChart = new FlowContainersChart('#container', { width: 800, height: 600, showParticles: true, showBubbles: true, animationDuration: 2000 }); const containerData = { containers: [ { year: 2024, amount: 120000, fillPercentage: 0.65 }, { year: 2025, amount: 135000, fillPercentage: 0.72 } ] }; flowChart.setData(containerData).render(); ``` #### Spiral Chart 🆕 Spiral visualization with floating particles and breathing animations. ```javascript import { SpiralChart } from 'd3-charts-viz-library'; const spiralChart = new SpiralChart('#container', { width: 800, height: 600, turns: 4, showParticles: true, showFlowLines: true, showBreathing: true, centerLabel: 'Data Flow' }); const spiralData = { timeSeries: [ { period: 1, primaryValue: 100000, secondaryValue: 25000 }, { period: 2, primaryValue: 110000, secondaryValue: 28000 }, { period: 3, primaryValue: 125000, secondaryValue: 32000 } ] }; spiralChart.setData(spiralData).render(); ``` #### Animated Bump Chart Animated area chart showing component breakdown over time. ```javascript import { AnimatedBumpChart } from 'd3-charts-viz-library'; const bumpChart = new AnimatedBumpChart('#container', { width: 800, height: 500, principalRatio: 0.6, showDistributionBars: true, showPoints: true }); bumpChart.setData(timelineData).render(); ``` #### Radial Remainder Chart Spiral visualization showing growth patterns over time. ```javascript import { RadialRemainderChart } from 'd3-charts-viz-library'; const radialRemainderChart = new RadialRemainderChart('#container', { width: 600, height: 600, spiralRotations: 2, animationDuration: 3000 }); radialRemainderChart.setData(timelineData).render(); ``` #### Radial Stacked Bar Chart Concentric rings with stacked segments for multi-category data visualization. ```javascript import { RadialStackedBarChart } from 'd3-charts-viz-library'; const radialStackedBarChart = new RadialStackedBarChart('#container', { width: 600, height: 600, colorScheme: 'blue', // 'blue', 'orange', or 'green' animated: true, showLegend: true, showTooltip: true }); const data = [ { year: 2024, categoryA: 50000, categoryB: 75000, categoryC: 5000, totalValue: 130000 }, { year: 2025, categoryA: 52500, categoryB: 82000, categoryC: 5200, totalValue: 139700 }, { year: 2026, categoryA: 55125, categoryB: 89500, categoryC: 5400, totalValue: 150025 } ]; radialStackedBarChart.setData(data).render(); ``` #### Calendar Heatmap Chart GitHub-style calendar visualization for displaying activity patterns over time. ```javascript import { CalendarHeatmapChart } from 'd3-charts-viz-library'; const calendarChart = new CalendarHeatmapChart('#container', { width: 900, height: 200, colorScheme: 'green', // 'green', 'blue', 'purple', or 'orange' year: 2024, showTooltip: true, showLegend: true, animated: true }); const data = [ { date: '2024-01-15', value: 12 }, { date: '2024-02-20', value: 8 }, { date: '2024-03-10', value: 15 }, { date: '2024-04-05', value: 22 }, { date: '2024-05-12', value: 18 }, { date: '2024-06-08', value: 25 }, { date: '2024-07-14', value: 30 }, { date: '2024-08-22', value: 28 }, { date: '2024-09-17', value: 20 }, { date: '2024-10-11', value: 16 }, { date: '2024-11-25', value: 14 }, { date: '2024-12-18', value: 10 } ]; calendarChart.setData(data).render(); ``` ## Multi-Series Charts ### Multi-Line Chart ```javascript const seriesData = [ { name: 'Series 1', color: '#3498db', data: [{ x: 0, y: 10 }, { x: 1, y: 25 }, { x: 2, y: 15 }] }, { name: 'Series 2', color: '#e74c3c', data: [{ x: 0, y: 5 }, { x: 1, y: 20 }, { x: 2, y: 30 }] } ]; lineChart.renderMultiSeries(seriesData); ``` ### Stacked Area Chart ```javascript areaChart.renderStacked(seriesData); ``` ## Utility Functions The library includes utility functions for data processing: ```javascript import { DataUtils, ColorUtils, MathUtils } from 'd3-charts-viz-library'; // Generate sample data const sampleData = DataUtils.generateSampleData('linear', 50); // Parse CSV data const csvData = DataUtils.parseCSV(csvString, 'x', 'y', 'label'); // Generate color palette const colors = ColorUtils.generatePalette(5, 'category10'); // Calculate statistics const stats = MathUtils.stats(data, 'value'); ``` ## Configuration Options ### Common Options All charts inherit from `BaseChart` and support these common options: ```javascript { width: 800, // Chart width height: 400, // Chart height margin: { // Chart margins top: 20, right: 30, bottom: 40, left: 40 }, backgroundColor: '#ffffff', // Background color onClick: (data, event) => {} // Click handler } ``` ### Chart-Specific Options Each chart type has its own specific options. Refer to the individual chart documentation for details. ## Responsive Charts Make your charts responsive: ```javascript import { DOMUtils } from 'd3-charts-viz-library'; const chart = new BarChart('#container'); const container = document.getElementById('container'); // Make chart responsive DOMUtils.makeResponsive(chart, container); ``` ## Exporting Charts Export charts as images: ```javascript import { DOMUtils } from 'd3-charts-viz-library'; const svgElement = document.querySelector('#container svg'); DOMUtils.exportAsImage(svgElement, 'my-chart.png'); ``` ## Animation Charts come with built-in animations. You can customize animation timing: ```javascript const chart = new BarChart('#container', { animationDuration: 1000, animationDelay: 100 }); ``` ## Events Charts support various events: ```javascript const chart = new BarChart('#container', { onClick: (data, event) => { console.log('Clicked:', data); }, onHover: (data, event) => { console.log('Hovered:', data); } }); ``` ## Browser Support - Chrome 60+ - Firefox 55+ - Safari 12+ - Edge 79+ ## Dependencies - D3.js v7.8.5+ ## Contributing 1. Fork the repository 2. Create your feature branch (`git checkout -b feature/amazing-feature`) 3. Commit your changes (`git commit -m 'Add some amazing feature'`) 4. Push to the branch (`git push origin feature/amazing-feature`) 5. Open a Pull Request ## License This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. ## 🛡️ Production Ready This library has undergone comprehensive testing and bug fixes to ensure production reliability: ### ✅ Recent Bug Fixes (v1.0.10) - **RadialTimelineChart**: Fixed "Expected number" SVG path errors with robust validation - **FlowContainersChart**: Resolved context issues and infinite recursion bugs - **ForceDirectedChart**: Enhanced coordinate validation for stable animations - **All Charts**: Added comprehensive error handling for edge cases and invalid data ### 🎆 Error Handling - Graceful handling of NaN, Infinity, and undefined values - Automatic fallbacks for invalid data inputs - Comprehensive validation in all animation transitions - Production-ready stability with edge case management ## Changelog ### v1.0.15 (Latest) - **NEW**: Added CalendarHeatmapChart with GitHub-style calendar visualization - Beautiful calendar grid showing activity patterns over a full year - Four color schemes: green (GitHub style), blue, purple, and orange - Interactive hover tooltips with date and value information - Configurable options: year selection, animation, legend, tooltips - Automatic weekend vs weekday pattern generation - Month and weekday labels with seasonal variation simulation - 🎮 **IMPROVED**: Interactive playground with 13 chart types - Added CalendarHeatmapChart to playground with full interactive controls - New controls: Update Data, Change Color Scheme, Change Year, Toggle Animation - Realistic activity data generator with patterns and seasonal variations - 📚 **UPDATED**: Comprehensive documentation and examples - Complete README section with Calendar Heatmap usage examples - Updated chart count from 17+ to 18+ chart types - Added sample code with date-based data structure ### v1.0.11 - **NEW**: Added RadialStackedBarChart with concentric rings and stacked segments - Beautiful radial visualization with year-over-year data in concentric rings - Three color schemes: blue, orange, and green - Interactive hover tooltips with detailed component breakdown - Click to select years with animated transitions - Configurable options: animation, legend, tooltips, center label - 🎨 **ENHANCED**: Generic data structure for broader applicability - Replaced financial-specific terms with generic categories (categoryA, categoryB, categoryC) - Flexible data format suitable for various use cases beyond financial data - Improved data generator with configurable percentages and growth patterns - 🎮 **IMPROVED**: Interactive playground with 12 chart types - Added RadialStackedBarChart to playground with full interactive controls - New controls: Update Data, Change Color Scheme, Toggle Animation, Toggle Legend - Copy-to-clipboard functionality for complete code examples - 📚 **UPDATED**: Comprehensive documentation and code examples - Complete README section with usage examples and data structure - Updated chart count from 16+ to 17+ chart types - Added sample code with generic data for easy implementation ### v1.0.10 - **NEW**: Added SpiralChart with floating particles and breathing animations - 🔧 **FIXED**: RadialTimelineChart SVG path validation and animation safety - 🔧 **FIXED**: FlowContainersChart context issues and recursive method calls - 🔧 **FIXED**: ForceDirectedChart coordinate validation - 📚 **UPDATED**: Comprehensive README with all chart types ### v1.0.9 - **NEW**: Added FlowContainersChart with liquid animations - 🔧 **FIXED**: Multiple chart stability improvements - 🎮 **ENHANCED**: Playground integration for all charts ### v1.0.8 - **NEW**: Added ForceDirectedChart and AnimatedBumpChart - 🎆 **ENHANCED**: Advanced particle effects and animations - 🔧 **IMPROVED**: Generic naming conventions for broader applicability ### v1.0.7 - **NEW**: Added RadialRemainderChart with spiral visualizations - 🎮 **ENHANCED**: Interactive playground with live examples - 📊 **IMPROVED**: Data processing and validation ### v1.0.6 - **NEW**: Added advanced chart types (Sankey, Liquid Fill, Chord Diagram) - 🎨 **ENHANCED**: Visual effects and animations - 🔧 **IMPROVED**: Code organization and modularity ### v1.0.0 - Initial release - Support for 7 chart types - Comprehensive utility functions - Full documentation and examples ## Support For questions and support, please open an issue on GitHub.