TAChart: Support errorbars in TAreaSeries.

This commit is contained in:
wp_xyz 2023-12-28 13:29:12 +01:00
parent 4a975e2e79
commit 6455279789
4 changed files with 74 additions and 41 deletions

View File

@ -58,6 +58,9 @@
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
</SearchPaths>
<Linking>
<Debugging>
<DebugInfoType Value="dsDwarf3"/>
</Debugging>
<Options>
<Win32>
<GraphicApplication Value="True"/>

View File

@ -6,8 +6,8 @@ object MainForm: TMainForm
Caption = 'MainForm'
ClientHeight = 601
ClientWidth = 1136
LCLVersion = '3.99.0.0'
OnCreate = FormCreate
LCLVersion = '2.3.0.0'
object Chart1: TChart
Left = 208
Height = 601
@ -16,6 +16,8 @@ object MainForm: TMainForm
AxisList = <
item
Grid.Color = clSilver
AxisPen.Width = 2
AxisPen.Visible = True
Marks.LabelBrush.Style = bsClear
Minors = <>
Title.LabelFont.Orientation = 900
@ -24,6 +26,8 @@ object MainForm: TMainForm
item
Grid.Color = clSilver
Alignment = calBottom
AxisPen.Width = 2
AxisPen.Visible = True
Marks.LabelBrush.Style = bsClear
Minors = <>
Title.LabelBrush.Style = bsClear
@ -106,6 +110,13 @@ object MainForm: TMainForm
YErrorBars.Pen.Color = clGreen
YErrorBars.Visible = True
end
object Chart1AreaSeries1: TAreaSeries
Active = False
Title = 'Area'
AreaBrush.Color = clYellow
AreaLinesPen.Style = psClear
Source = RandomChartSource1
end
end
object Panel1: TPanel
Left = 0
@ -125,14 +136,14 @@ object MainForm: TMainForm
Left = 8
Height = 19
Top = 574
Width = 61
Width = 59
Anchors = [akLeft, akBottom]
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Bottom = 8
Caption = 'Rotated'
OnChange = CbRotatedChange
TabOrder = 0
OnChange = CbRotatedChange
end
object GbXErr: TGroupBox
AnchorSideLeft.Control = Panel1
@ -159,13 +170,13 @@ object MainForm: TMainForm
Left = 16
Height = 19
Top = 33
Width = 66
Width = 64
BorderSpacing.Top = 10
Caption = 'constant'
Checked = True
OnChange = RbXErrConstChange
TabOrder = 4
TabStop = True
OnChange = RbXErrConstChange
end
object RbXErrPercent: TRadioButton
AnchorSideLeft.Control = RbXErrConst
@ -174,11 +185,11 @@ object MainForm: TMainForm
Left = 16
Height = 19
Top = 56
Width = 79
Width = 77
BorderSpacing.Top = 4
Caption = 'percentage'
OnChange = RbXErrPercentChange
TabOrder = 0
OnChange = RbXErrPercentChange
end
object RbXErrChartSource: TRadioButton
AnchorSideLeft.Control = RbXErrConst
@ -187,11 +198,11 @@ object MainForm: TMainForm
Left = 16
Height = 19
Top = 79
Width = 72
Width = 70
BorderSpacing.Top = 4
Caption = 'individual'
OnChange = RbXErrChartSourceChange
TabOrder = 1
OnChange = RbXErrChartSourceChange
end
object EdXErrConst: TFloatSpinEdit
AnchorSideLeft.Control = RbXErrPercent
@ -200,10 +211,10 @@ object MainForm: TMainForm
AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = GbXErr
AnchorSideRight.Side = asrBottom
Left = 119
Left = 117
Height = 23
Top = 31
Width = 61
Width = 63
Alignment = taRightJustify
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 24
@ -211,9 +222,9 @@ object MainForm: TMainForm
DecimalPlaces = 1
Increment = 0.1
MaxValue = 2
OnChange = EdXErrConstChange
TabOrder = 2
Value = 1
OnChange = EdXErrConstChange
end
object EdXErrPercent: TFloatSpinEdit
AnchorSideLeft.Control = RbXErrPercent
@ -222,20 +233,20 @@ object MainForm: TMainForm
AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = EdXErrConst
AnchorSideRight.Side = asrBottom
Left = 119
Left = 117
Height = 23
Top = 54
Width = 61
Width = 63
Alignment = taRightJustify
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 24
DecimalPlaces = 1
Increment = 2
MaxValue = 100
OnChange = EdXErrPercentChange
TabOrder = 3
Value = 10
Visible = False
OnChange = EdXErrPercentChange
end
object CbXErrShow: TCheckBox
AnchorSideLeft.Control = GbXErr
@ -243,14 +254,14 @@ object MainForm: TMainForm
Left = 16
Height = 19
Top = 4
Width = 102
Width = 100
BorderSpacing.Left = 16
BorderSpacing.Top = 4
Caption = 'Show error bars'
Checked = True
OnChange = CbXErrShowChange
State = cbChecked
TabOrder = 5
OnChange = CbXErrShowChange
end
object CbXErrDifferent: TCheckBox
AnchorSideLeft.Control = CbXErrShow
@ -259,12 +270,12 @@ object MainForm: TMainForm
Left = 16
Height = 19
Top = 106
Width = 135
Width = 133
BorderSpacing.Top = 8
BorderSpacing.Bottom = 8
Caption = 'asymmetric error bars'
OnChange = CbXErrDifferentChange
TabOrder = 6
OnChange = CbXErrDifferentChange
end
end
object GbYErr: TGroupBox
@ -292,13 +303,13 @@ object MainForm: TMainForm
Left = 16
Height = 19
Top = 33
Width = 66
Width = 64
BorderSpacing.Top = 10
Caption = 'constant'
Checked = True
OnChange = RbYErrConstChange
TabOrder = 4
TabStop = True
OnChange = RbYErrConstChange
end
object RbYErrPercent: TRadioButton
AnchorSideLeft.Control = CbYErrShow
@ -307,11 +318,11 @@ object MainForm: TMainForm
Left = 16
Height = 19
Top = 56
Width = 79
Width = 77
BorderSpacing.Top = 4
Caption = 'percentage'
OnChange = RbYErrPercentChange
TabOrder = 0
OnChange = RbYErrPercentChange
end
object RbYErrChartSource: TRadioButton
AnchorSideLeft.Control = CbYErrShow
@ -320,11 +331,11 @@ object MainForm: TMainForm
Left = 16
Height = 19
Top = 79
Width = 72
Width = 70
BorderSpacing.Top = 4
Caption = 'individual'
OnChange = RbYErrChartSourceChange
TabOrder = 1
OnChange = RbYErrChartSourceChange
end
object EdYErrConst: TFloatSpinEdit
AnchorSideLeft.Control = RbYErrPercent
@ -333,10 +344,10 @@ object MainForm: TMainForm
AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = GbYErr
AnchorSideRight.Side = asrBottom
Left = 119
Left = 117
Height = 23
Top = 31
Width = 61
Width = 63
Alignment = taRightJustify
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 24
@ -344,9 +355,9 @@ object MainForm: TMainForm
DecimalPlaces = 1
Increment = 0.1
MaxValue = 2
OnChange = EdYErrConstChange
TabOrder = 2
Value = 1
OnChange = EdYErrConstChange
end
object EdYErrPercent: TFloatSpinEdit
AnchorSideLeft.Control = RbYErrPercent
@ -355,20 +366,20 @@ object MainForm: TMainForm
AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = EdYErrConst
AnchorSideRight.Side = asrBottom
Left = 119
Left = 117
Height = 23
Top = 54
Width = 61
Width = 63
Alignment = taRightJustify
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 24
DecimalPlaces = 1
Increment = 2
MaxValue = 100
OnChange = EdYErrPercentChange
TabOrder = 3
Value = 10
Visible = False
OnChange = EdYErrPercentChange
end
object CbYErrShow: TCheckBox
AnchorSideLeft.Control = GbYErr
@ -376,14 +387,14 @@ object MainForm: TMainForm
Left = 16
Height = 19
Top = 4
Width = 102
Width = 100
BorderSpacing.Left = 16
BorderSpacing.Top = 4
Caption = 'Show error bars'
Checked = True
OnChange = CbYErrShowChange
State = cbChecked
TabOrder = 5
OnChange = CbYErrShowChange
end
object CbYErrDifferent: TCheckBox
AnchorSideLeft.Control = CbYErrShow
@ -392,12 +403,12 @@ object MainForm: TMainForm
Left = 16
Height = 19
Top = 106
Width = 135
Width = 133
BorderSpacing.Top = 8
BorderSpacing.Bottom = 8
Caption = 'asymmetric error bars'
OnChange = CbYErrDifferentChange
TabOrder = 6
OnChange = CbYErrDifferentChange
end
end
object RgChartSource: TRadioGroup
@ -406,7 +417,7 @@ object MainForm: TMainForm
Left = 8
Height = 93
Top = 8
Width = 185
Width = 183
AutoFill = True
AutoSize = True
BorderSpacing.Around = 8
@ -421,15 +432,15 @@ object MainForm: TMainForm
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 1
ClientHeight = 73
ClientWidth = 181
ClientWidth = 179
ItemIndex = 0
Items.Strings = (
'RandomChartSource'
'ListChartSource'
'UserDefinedChartSource'
)
OnClick = RgChartSourceClick
TabOrder = 3
OnClick = RgChartSourceClick
end
object GbErrorBarStyle: TGroupBox
AnchorSideLeft.Control = GbYErr
@ -466,9 +477,9 @@ object MainForm: TMainForm
BorderSpacing.Right = 8
MaxValue = 5
MinValue = 1
OnChange = EdErrPenWidthChange
TabOrder = 0
Value = 1
OnChange = EdErrPenWidthChange
end
object LblErrLineWidth: TLabel
AnchorSideLeft.Control = GbErrorBarStyle
@ -525,7 +536,6 @@ object MainForm: TMainForm
BorderSpacing.Top = 4
BorderSpacing.Right = 4
BorderSpacing.Bottom = 4
ItemHeight = 0
TabOrder = 2
end
object StringGrid1: TStringGrid
@ -557,7 +567,7 @@ object MainForm: TMainForm
)
end
object RandomChartSource1: TRandomChartSource
PointsNumber = 10
PointsNumber = 11
RandSeed = 56490104
XMax = 10
YMax = 10

View File

@ -17,6 +17,7 @@ type
CbYErrDifferent: TCheckBox;
CbYErrShow: TCheckBox;
Chart1: TChart;
Chart1AreaSeries1: TAreaSeries;
Chart1BSplineSeries1: TBSplineSeries;
Chart1CubicSplineSeries1: TCubicSplineSeries;
Chart1FitSeries1: TFitSeries;
@ -135,6 +136,9 @@ begin
Chart1FitSeries1.AxisIndexX := Chart1lineSeries1.AxisIndexX;
Chart1FitSeries1.AxisIndexY := Chart1LineSeries1.AxisIndexY;
Chart1AreaSeries1.AxisIndexX := Chart1LineSeries1.AxisIndexX;
Chart1AreaSeries1.AxisIndexY := Chart1LineSeries1.AxisIndexY;
end;
procedure TMainForm.CbXErrShowChange(Sender: TObject);
@ -143,6 +147,7 @@ begin
Chart1BSplineSeries1.XErrorBars.Visible := CbXErrShow.Checked;
Chart1CubicSplineSeries1.XErrorBars.Visible := CbXErrShow.Checked;
Chart1FitSeries1.XErrorBars.Visible := CbXErrShow.Checked;
Chart1AreaSeries1.XErrorBars.Visible := CbXErrShow.Checked;
end;
procedure TMainForm.CbXErrDifferentChange(Sender: TObject);
@ -161,6 +166,7 @@ begin
Chart1BSplineSeries1.YErrorBars.Visible := CbYErrShow.Checked;
Chart1CubicSplineSeries1.YErrorBars.Visible := CbYErrShow.Checked;
Chart1FitSeries1.YErrorBars.Visible := CbYErrShow.Checked;
Chart1AreaSeries1.YErrorBars.Visible := CbYErrShow.Checked;
end;
procedure TMainForm.Chart1AfterPaint(ASender: TChart);
@ -201,11 +207,13 @@ begin
Chart1BSplineSeries1.XErrorBars.Pen.Style := CbErrPenStyle.PenStyle;
Chart1CubicSplineSeries1.XErrorBars.Pen.Style := CbErrPenStyle.PenStyle;
Chart1FitSeries1.XErrorBars.Pen.Style := CbErrPenStyle.PenStyle;
Chart1AreaSeries1.XErrorBars.Pen.Style := CbErrPenStyle.PenStyle;
Chart1LineSeries1.YErrorBars.Pen.Style := CbErrPenStyle.PenStyle;
Chart1BSplineSeries1.YErrorBars.Pen.Style := CbErrPenStyle.PenStyle;
Chart1CubicSplineSeries1.YErrorBars.Pen.Style := CbErrPenStyle.PenStyle;
Chart1FitSeries1.YErrorBars.Pen.Style := CbErrPenStyle.PenStyle;
Chart1AreaSeries1.YErrorBars.Pen.Style := CbErrPenStyle.PenStyle;
end;
procedure TMainForm.EdXErrConstChange(Sender: TObject);
@ -219,11 +227,13 @@ begin
Chart1BSplineSeries1.XErrorBars.Pen.Width := EdErrPenWidth.Value;
Chart1CubicSplineSeries1.XErrorBars.Pen.Width := EdErrPenWidth.Value;
Chart1FitSeries1.XErrorBars.Pen.Width := EdErrPenWidth.Value;
Chart1AreaSeries1.XErrorBars.Pen.Width := EdErrPenWidth.Value;
Chart1LineSeries1.YErrorBars.Pen.Width := EdErrPenWidth.Value;
Chart1BSplineSeries1.YErrorBars.Pen.Width := EdErrPenWidth.Value;
Chart1CubicSplineSeries1.YErrorBars.Pen.Width := EdErrPenWidth.Value;
Chart1FitSeries1.YErrorBars.Pen.Width := EdErrPenWidth.Value;
Chart1AreaSeries1.YErrorBars.Pen.Width := EdErrPenWidth.Value;
end;
procedure TMainForm.StringGrid1PrepareCanvas(Sender: TObject; aCol, aRow: Integer;
@ -270,6 +280,11 @@ end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
Chart1AreaSeries1.XErrorBars.Visible := true;
Chart1AreaSeries1.YErrorBars.Visible := true;
Chart1AreaSeries1.XErrorBars.Pen.Color := clOlive;
Chart1AreaSeries1.YErrorBars.Pen.Color := clOlive;
PopulateUserData;
end;
@ -348,18 +363,21 @@ begin
Chart1BSplineSeries1.Source := RandomChartSource1;
Chart1CubicSplineSeries1.Source := RandomChartSource1;
Chart1FitSeries1.Source := RandomChartSource1;
Chart1AreaSeries1.Source := RandomChartSource1;
end;
1: begin
Chart1LineSeries1.Source := ListChartSource1;
Chart1BSplineSeries1.Source := ListChartSource1;
Chart1CubicSplineSeries1.Source := ListChartSource1;
Chart1FitSeries1.Source := ListChartSource1;
Chart1AreaSeries1.Source := ListChartSource1;
end;
2: begin
Chart1LineSeries1.Source := UserDefinedChartSource1;
Chart1BSplineSeries1.Source := UserDefinedChartSource1;
Chart1CubicSplineSeries1.Source := UserDefinedChartSource1;
Chart1FitSeries1.Source := UserDefinedChartSource1;
Chart1AreaSeries1.Source := UserDefinedChartSource1;
end;
end;

View File

@ -226,6 +226,8 @@ type
read FUseZeroLevel write SetUseZeroLevel default false;
property ZeroLevel: Double
read FZeroLevel write SetZeroLevel stored IsZeroLevelStored;
property XErrorBars;
property YErrorBars;
end;
TSeriesPointerDrawEvent = procedure (