Skip to main content

Overview

TeeChart VCL provides specialized series types for statistical data visualization and analysis. These charts help visualize distributions, variability, correlations, and statistical relationships in your data.

Box Plot Series

Box plots (also called box-and-whisker plots) display the distribution of data showing quartiles, median, and outliers.

Basic Box Plot

Location: TeeNew/BoxPlot_Series.pas
unit BoxPlot_Series;

type
  TBoxPlotForm = class(TBaseForm)
    Series1: TBoxSeries;
    Series2: TBoxSeries;
    Series3: TBoxSeries;
    CheckBox1: TCheckBox;
  end;

procedure TBoxPlotForm.FormCreate(Sender: TObject);
begin
  inherited;
  
  // Add data arrays for each box
  Series1.AddArray([3, 6, 8, 15, 19, 21]);
  Series2.AddArray([3, 6, 8, 15, 19, 21]);
  Series3.AddArray([3, 6, 8, 15, 19, 21]);
end;

procedure TBoxPlotForm.CheckBox1Click(Sender: TObject);
var
  tmp: TChartSeriesClass;
begin
  // Switch between vertical and horizontal
  if CheckBox1.Checked then
    tmp := TBoxSeries
  else
    tmp := THorizBoxSeries;
    
  ChangeAllSeriesType(Chart1, tmp);
end;
Box Plot Components:
  • Minimum: Lowest value (excluding outliers)
  • Q1: First quartile (25th percentile)
  • Median: Second quartile (50th percentile)
  • Q3: Third quartile (75th percentile)
  • Maximum: Highest value (excluding outliers)
  • Outliers: Points beyond whiskers

Box Plot with Custom Values

Location: TeeNew/BoxSeries_CustomValues.pas
procedure TBoxCustomValues.FormCreate(Sender: TObject);
begin
  inherited;
  
  // Manually set quartile values
  with Series1 do
  begin
    // Add custom box with specific quartile values
    Add(100);  // Position
    
    // Set custom values
    Minimum := 50;
    Quartile1 := 75;
    Median := 100;
    Quartile3 := 125;
    Maximum := 150;
    
    // Add outliers
    AddOutlier(100, 30);   // Outlier at position 100, value 30
    AddOutlier(100, 180);  // Outlier at position 100, value 180
  end;
end;

Box Plot Features

Whisker Styles

Configure whisker length using IQR multiples or percentiles

Outlier Detection

Automatic outlier identification and display

Color Customization

Different colors for boxes, whiskers, and outliers

Orientation

Vertical or horizontal box plot layouts

Histogram Series

Histograms show the distribution of continuous data by grouping values into bins.

Basic Histogram

Location: TeeNew/Histogram_Series.pas
unit Histogram_Series;

type
  THistogramForm = class(TBaseForm)
    Series1: THistogramSeries;
  end;

procedure THistogramForm.FormCreate(Sender: TObject);
begin
  inherited;
  Series1.FillSampleValues(100);
end;

Histogram with Custom Function

Location: TeeNew/Function_Histogram.pas
procedure THistogramFunction.FormCreate(Sender: TObject);
begin
  inherited;
  
  // Source data
  Series1.FillSampleValues(1000);
  
  // Configure histogram function
  with HistogramFunc do
  begin
    Source := Series1;           // Source series
    NumBins := 20;               // Number of bins
    Cumulative := False;         // Non-cumulative
    
    // Bin configuration
    BinRange := brAuto;          // Auto-calculate range
    // or manual:
    // BinRange := brManual;
    // BinMin := 0;
    // BinMax := 100;
  end;
end;

Histogram Features

  • Automatic bins: Based on data range
  • Manual bins: Specify number and range
  • Variable width: Custom bin widths
  • Cumulative: Running total option
  • Bar or line display
  • Bin labels showing ranges
  • Frequency or density
  • Overlay normal distribution curve

Histogram with Y Origin

Location: TeeNew/HistogramYOrigin.pas
procedure THistogramYOrigin.FormCreate(Sender: TObject);
begin
  inherited;
  
  Series1.FillSampleValues(50);
  
  // Set custom Y origin
  Series1.UseYOrigin := True;
  Series1.YOrigin := 0;
  
  // Show distribution from baseline
  Series1.MultiBar := mbNone;
end;

Histogram Transparency

Location: TeeNew/Histogram_Transparency.pas Useful for overlaying multiple distributions:
procedure THistogramTransp.FormCreate(Sender: TObject);
begin
  inherited;
  
  Series1.FillSampleValues(100);
  Series2.FillSampleValues(100);
  
  // Make histograms transparent for overlay
  Series1.Transparency := 60;
  Series2.Transparency := 60;
  
  Series1.Color := clRed;
  Series2.Color := clBlue;
end;

Error Bar Series

Error bars visualize uncertainty or variability in measurements.

Error Bar with Negative Values

Location: TeeNew/ErrorBar_Negative.pas
unit ErrorBar_Negative;

type
  TErrorBarForm = class(TBaseForm)
    Series1: TErrorBarSeries;
  end;

procedure TErrorBarForm.FormCreate(Sender: TObject);
begin
  inherited;
  
  with Series1 do
  begin
    // Add points with error values
    AddErrorBar(1, 10, 2.5, 1.5);  // X, Y, TopError, BottomError
    AddErrorBar(2, 15, 3.0, 2.0);
    AddErrorBar(3, 12, 2.0, 2.5);
    
    // Configure error bar appearance
    ErrorPen.Width := 2;
    ErrorPen.Color := clRed;
    ErrorWidth := 5;  // Width of error bar caps
  end;
end;
Error Bar Types:
Same error amount above and below each point
Series1.AddErrorBar(X, Y, Error, Error);

Statistical Functions

TeeChart provides functions to calculate statistical measures from your data.

Standard Deviation

Location: TeeNew/Function_StdDeviation.pas
procedure TStdDevForm.FormCreate(Sender: TObject);
begin
  inherited;
  
  // Source data
  Series1.FillSampleValues(100);
  
  // Standard deviation function
  StdDevFunc.Period := 20;       // Rolling 20-point window
  StdDevFunc.Series := Series1;  // Source series
  
  // Display as band
  UpperBand.DataSource := StdDevFunc;
  LowerBand.DataSource := StdDevFunc;
end;

Curve Fitting

Location: TeeNew/Function_CurveFitting.pas
procedure TCurveFittingForm.FormCreate(Sender: TObject);
begin
  inherited;
  
  // Scatter data
  Series1.FillSampleValues(50);
  
  // Fit curve to data
  CurveFit.Series := Series1;
  CurveFit.FitType := ftPolynomial;  // or ftExponential, ftLogarithmic
  CurveFit.PolynomialDegree := 3;    // Cubic fit
  
  // Display fitted curve
  FittedSeries.DataSource := CurveFit;
end;

Correlation

Location: TeeNew/Function_Correlation.pas
procedure TCorrelationForm.FormCreate(Sender: TObject);
begin
  inherited;
  
  Series1.FillSampleValues(100);
  Series2.FillSampleValues(100);
  
  // Calculate correlation
  CorrelFunc.Period := 20;          // Rolling window
  CorrelFunc.Series := Series1;     // First series
  CorrelFunc.Series2 := Series2;    // Second series
  
  // Display correlation coefficient
  CorrelSeries.DataSource := CorrelFunc;
end;

Statistical Analysis Functions

Average

Mean value calculation with configurable period

Median

Middle value in sorted dataset

Mode

Most frequently occurring value

Variance

Measure of data spread

Skewness

Distribution asymmetry measure

Kurtosis

Distribution tail heaviness

RMS

Root mean square calculation

Count

Data point counting with conditions

Advanced Statistical Features

Kernel Density Estimation

Location: TeeNew/Function_KDE.pas
procedure TKDEForm.FormCreate(Sender: TObject);
begin
  inherited;
  
  // Sample data
  Series1.FillSampleValues(200);
  
  // KDE function for smooth distribution
  KDEFunc.Series := Series1;
  KDEFunc.Bandwidth := 0.5;  // Smoothing parameter
  KDEFunc.NumPoints := 100;  // Points in output curve
  
  // Display smooth density curve
  DensitySeries.DataSource := KDEFunc;
end;

Statistical Process Control (SPC)

Location: TeeNew/Function_SPC.pas
procedure TSPCForm.FormCreate(Sender: TObject);
begin
  inherited;
  
  // Process data
  Series1.FillSampleValues(100);
  
  // SPC function
  SPCFunc.Series := Series1;
  SPCFunc.NumSigmas := 3;           // 3-sigma control limits
  SPCFunc.ChartType := spcXBar;     // X-bar chart
  
  // Display control limits
  UpperControlLimit.DataSource := SPCFunc;
  LowerControlLimit.DataSource := SPCFunc;
  CenterLine.DataSource := SPCFunc;
end;

Multi-Series Analysis

Comparing Distributions

procedure CompareDistributions;
begin
  // Multiple box plots side by side
  BoxSeries1.AddArray(Dataset1);
  BoxSeries2.AddArray(Dataset2);
  BoxSeries3.AddArray(Dataset3);
  
  // Configure side-by-side display
  BoxSeries1.MultiBar := mbSide;
  BoxSeries2.MultiBar := mbSide;
  BoxSeries3.MultiBar := mbSide;
  
  // Add statistical comparison
  Label1.Caption := Format('Mean: %.2f vs %.2f vs %.2f', [
    CalculateMean(Dataset1),
    CalculateMean(Dataset2),
    CalculateMean(Dataset3)
  ]);
end;

Overlaying Histograms

procedure OverlayHistograms;
begin
  // Create transparent histograms
  Histogram1.Transparency := 50;
  Histogram2.Transparency := 50;
  
  // Different colors
  Histogram1.Color := clRed;
  Histogram2.Color := clBlue;
  
  // Same bin configuration for comparison
  Histogram1.NumBins := 20;
  Histogram2.NumBins := 20;
end;

Performance Tips

For large statistical datasets:
1

Pre-calculate Statistics

Chart1.AutoRepaint := False;
// Calculate all statistics
Chart1.AutoRepaint := True;
2

Use Sampling

Histogram.DownSampling := True;
Histogram.MaxPoints := 1000;
3

Optimize Functions

StdDev.CalculateEvery := 10;

Financial Charts

Technical analysis and indicators

Standard Series

Basic scatter and line plots

3D Charts

3D scatter plots and surface charts

Export

Export statistical charts to reports

Statistical Sample List

Complete list of statistical samples in TeeNew:
  • BoxPlot_Series.pas - Basic box plots
  • BoxSeries_CustomValues.pas - Custom quartile values
  • Histogram_Series.pas - Basic histograms
  • HistogramYOrigin.pas - Histogram baseline
  • Histogram_Transparency.pas - Overlaid distributions
  • ErrorBar_Negative.pas - Error bars
  • Function_Histogram.pas - Histogram calculation
  • Function_StdDeviation.pas - Standard deviation
  • Function_Variance.pas - Variance calculation
  • Function_Correlation.pas - Correlation analysis
  • Function_CurveFitting.pas - Curve fitting
  • Function_KDE.pas - Kernel density estimation
  • Function_Skewness.pas - Skewness calculation
  • Function_Kurtosis.pas - Kurtosis calculation
  • Function_SPC.pas - Statistical process control
  • And more…

Build docs developers (and LLMs) love