AshReports.ChartEngine (ash_reports v0.1.0)
Core chart engine for AshReports.
Provides a unified interface for generating server-side SVG charts and visualizations using Contex with automatic chart type selection and caching capabilities.
Features
- Server-Side SVG Generation: Pure Elixir chart generation using Contex
- Automatic Chart Selection: Intelligent chart type selection based on data characteristics
- Multi-Renderer Support: SVG output works across HTML, HEEX, PDF, and JSON renderers
- Internationalization: Integration with CLDR and translation systems
- Performance Optimization: Efficient chart data processing and ETS-based caching
Supported Chart Types
Basic Charts:
- Line Charts: Time series data, trends, continuous data
- Bar Charts: Categorical comparisons, rankings, grouped data
- Pie Charts: Proportional data, percentages, parts-of-whole
- Area Charts: Cumulative data, stacked comparisons
Advanced Charts:
- Scatter Plots: Correlation analysis, data distribution
- Histogram Charts: Frequency distribution, statistical analysis
- Box Plots: Statistical summaries, outlier detection
- Heatmaps: Density visualization, correlation matrices
Chart Generation
All charts are generated server-side using Contex, producing SVG output that can be:
- Embedded directly in HTML/HEEX templates
- Converted to images for PDF rendering
- Served as data through JSON APIs
- Cached for improved performance
Usage Examples
Basic Chart Generation
chart_config = %ChartConfig{
type: :line,
data: time_series_data,
title: "Sales Trend"
}
{:ok, chart} = ChartEngine.generate(chart_config, context)Automatic Chart Selection
data = %{
sales_by_month: monthly_sales_data,
profit_margins: percentage_data
}
charts = ChartEngine.auto_select_charts(data, context)Real-time Chart Configuration
realtime_config = %ChartConfig{
type: :bar,
data: sales_data,
real_time: true,
update_interval: 30_000 # 30 seconds
}
{:ok, chart} = ChartEngine.generate(realtime_config, context)
Summary
Functions
Automatically select appropriate chart types based on data characteristics.
Generate a chart using the specified configuration and render context.
Generate multiple charts for comprehensive data visualization.
Get chart generation statistics and performance metrics.
Types
@type chart_result() :: {:ok, AshReports.ChartEngine.ChartData.t()} | {:error, String.t()}
@type chart_type() ::
:line | :bar | :pie | :area | :scatter | :histogram | :boxplot | :heatmap
Functions
@spec auto_select_charts(map(), AshReports.RenderContext.t()) :: [ AshReports.ChartEngine.ChartConfig.t() ]
Automatically select appropriate chart types based on data characteristics.
Analyzes the provided data and suggests the most suitable chart types for visualization based on data patterns, types, and relationships.
Examples
data = %{
revenue: [100, 150, 200, 175],
months: ["Jan", "Feb", "Mar", "Apr"]
}
suggestions = ChartEngine.auto_select_charts(data, context)
# Returns: [%ChartConfig{type: :line, confidence: 0.9}, ...]
@spec generate(AshReports.ChartEngine.ChartConfig.t(), AshReports.RenderContext.t()) :: chart_result()
Generate a chart using the specified configuration and render context.
Uses Contex for server-side SVG generation.
Examples
config = %ChartConfig{
type: :line,
data: [[1, 10], [2, 20], [3, 15]],
title: "Sales Trend"
}
{:ok, chart} = ChartEngine.generate(config, context)
@spec generate_chart_set(map(), AshReports.RenderContext.t()) :: {:ok, map()} | {:error, String.t()}
Generate multiple charts for comprehensive data visualization.
Creates a set of related charts that provide different perspectives on the same dataset for dashboard-style reporting.
Examples
chart_set = %{
overview: %ChartConfig{type: :line, data: trend_data},
breakdown: %ChartConfig{type: :pie, data: category_data},
comparison: %ChartConfig{type: :bar, data: comparison_data}
}
{:ok, charts} = ChartEngine.generate_chart_set(chart_set, context)
@spec get_metrics() :: map()
Get chart generation statistics and performance metrics.