ich möchte mit der Chart-Komponente Messwerte einmal im linearen und einmal im logarithmischen Maßstab (Basis 10) darstellen. Zum Üben habe ich ein einfaches Beispielprojekt LogChart (s. Anhang) erzeugt.
Neben der TAChart- wird noch die ChartAxisTransformations-Komponente benötigt.
So wie es aussieht (vorausgesetzt ich mache keine Denk- oder Bedienfehler) funktioniert der logarithmische Maßstab nur sinnvoll, wenn ich für ymin=0 und ymax=1 eingebe (s. Bild_1 linear, Bild_2 logarithmisch). Man erkennt, dass nun die Achsenwerte potenziert werden. Erhöht man ymax mit SpinEdit auf 3, so zeigt die y-Achse 1000 (10hoch3) und als Grid wird nur eine Dekade dargestellt (s. Bild_3).
Code: Alles auswählen
unit LogChartU;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Buttons,
ExtCtrls, Spin, StdCtrls, TATransformations, TAGraph;
type
{ TForm1 }
TForm1 = class(TForm)
BitBtn1: TBitBtn;
Chart1: TChart;
ChartAxisTransformations1: TChartAxisTransformations;
ChartAxisTransformations1LogarithmAxisTransform1: TLogarithmAxisTransform;
Label1: TLabel;
RadioGroup1: TRadioGroup;
SpinEdit1: TSpinEdit;
procedure FormCreate(Sender: TObject);
procedure RadioGroup1Click(Sender: TObject);
procedure SpinEdit1Change(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
SpinEdit1.Value:=10;
Chart1.Extent.UseYMin:=True;
Chart1.Extent.UseYMax:=True;
Chart1.Extent.UseXMin:=True;
Chart1.Extent.UseXMax:=True;
Chart1.Extent.YMin:=0;
Chart1.Extent.YMax:=SpinEdit1.Value;
Chart1.Extent.XMin:=0;
Chart1.Extent.XMax:=10;
Label1.Caption:='ymax';
end;
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
case RadioGroup1.ItemIndex of
0:ChartAxisTransformations1LogarithmAxisTransform1.Enabled:=False;
1:ChartAxisTransformations1LogarithmAxisTransform1.Enabled:=True;
end;
end;
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
Chart1.Extent.YMax:=SpinEdit1.Value;
end;
end.
Gruß, Linkat
PS: Sorry für die 'vergilbten' Screenshots. Lazarus 9.30.4