TDBChart 轴的指数刻度是否可能?
Is an exponential scale of an axis with TDBChart possible?
是否可以使用 TDBChart 对轴进行指数刻度(而不是对数刻度)?
当图形对应于指数增长时,y 轴的对数刻度很有用。如以下示例所示,图表中 0 和 1 之间的 y 轴值会特别突出显示,而超出该值的个别离群值将变得越来越不重要:
但是,如果与上面的示例相比,图形存在某种相反的行为,其中小值不是很重要(噪声)但应使个别离群值明确可见,那么指数比例是有用的:
那么,是否可以使用 TDBChart 以指数方式缩放轴?
以下代码用指数数据填充一个序列:
uses Series, Math;
procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
begin
Chart1.View3D:=False;
Chart1.Legend.Visible:=false;
with Chart1.AddSeries(TLineSeries) as TLineSeries do
begin
Pointer.Visible:=true;
Pointer.Size:=2;
for i := 1 to 10 do
Add(Power(2, i));
end;
end;
结果如下:
那么,如果在上面添加下面的代码:
Chart1.Axes.Left.Logarithmic:=true;
现在数据还是一样的,但是左轴刻度变成了对数刻度:
您还可以更改标签格式,即:
Chart1.Axes.Left.AxisValuesFormat:='00e-0';
Chart1.Axes.Left.LabelsExponent:=true;
编辑:
在 TeeChart 和自定义标签上设置 1.544 的对数底以在屏幕截图中显示这些标签:
uses Series, Math;
procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
begin
Chart1.View3D:=False;
Chart1.Legend.Visible:=false;
with Chart1.AddSeries(TLineSeries) as TLineSeries do
begin
Pointer.Visible:=true;
Pointer.Size:=2;
for i := 1 to 7 do
Add(Power(2, i));
end;
with Chart1.Axes.Left do
begin
Logarithmic:=True;
LogarithmicBase:=1.544;
MinorTicks.Visible:=false;
with Items do
begin
Clear;
Add(0.1, '0.1');
Add(1.2, '1.2');
Add(1.5, '1.5');
Add(2, '2');
Add(3, '3');
Add(5, '5');
Add(7, '7');
Add(10, '10');
Add(15, '15');
Add(20, '20');
Add(30, '30');
Add(40, '40');
Add(50, '50');
Add(70, '70');
Add(100, '100');
SetMinMax(0.1, 100);
end;
end;
end;
看起来像这样:
0.1 和 1.2 之间的距离比您的屏幕截图中的大得多,我不确定这是错误还是数学上正确。
我可以将轴刻度更改为从 1 而不是 0.1 开始,以使其看起来与您的屏幕截图非常相似,但我不确定这是否是您想要的:
SetMinMax(1, 100);
是否可以使用 TDBChart 对轴进行指数刻度(而不是对数刻度)?
当图形对应于指数增长时,y 轴的对数刻度很有用。如以下示例所示,图表中 0 和 1 之间的 y 轴值会特别突出显示,而超出该值的个别离群值将变得越来越不重要:
但是,如果与上面的示例相比,图形存在某种相反的行为,其中小值不是很重要(噪声)但应使个别离群值明确可见,那么指数比例是有用的:
那么,是否可以使用 TDBChart 以指数方式缩放轴?
以下代码用指数数据填充一个序列:
uses Series, Math;
procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
begin
Chart1.View3D:=False;
Chart1.Legend.Visible:=false;
with Chart1.AddSeries(TLineSeries) as TLineSeries do
begin
Pointer.Visible:=true;
Pointer.Size:=2;
for i := 1 to 10 do
Add(Power(2, i));
end;
end;
结果如下:
那么,如果在上面添加下面的代码:
Chart1.Axes.Left.Logarithmic:=true;
现在数据还是一样的,但是左轴刻度变成了对数刻度:
您还可以更改标签格式,即:
Chart1.Axes.Left.AxisValuesFormat:='00e-0';
Chart1.Axes.Left.LabelsExponent:=true;
编辑:
在 TeeChart 和自定义标签上设置 1.544 的对数底以在屏幕截图中显示这些标签:
uses Series, Math;
procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
begin
Chart1.View3D:=False;
Chart1.Legend.Visible:=false;
with Chart1.AddSeries(TLineSeries) as TLineSeries do
begin
Pointer.Visible:=true;
Pointer.Size:=2;
for i := 1 to 7 do
Add(Power(2, i));
end;
with Chart1.Axes.Left do
begin
Logarithmic:=True;
LogarithmicBase:=1.544;
MinorTicks.Visible:=false;
with Items do
begin
Clear;
Add(0.1, '0.1');
Add(1.2, '1.2');
Add(1.5, '1.5');
Add(2, '2');
Add(3, '3');
Add(5, '5');
Add(7, '7');
Add(10, '10');
Add(15, '15');
Add(20, '20');
Add(30, '30');
Add(40, '40');
Add(50, '50');
Add(70, '70');
Add(100, '100');
SetMinMax(0.1, 100);
end;
end;
end;
看起来像这样:
0.1 和 1.2 之间的距离比您的屏幕截图中的大得多,我不确定这是错误还是数学上正确。
我可以将轴刻度更改为从 1 而不是 0.1 开始,以使其看起来与您的屏幕截图非常相似,但我不确定这是否是您想要的:
SetMinMax(1, 100);