Delphi 具有TDBChart的轴的指数标度是否可能?
是否可以使用TDBChart的轴的指数刻度(而不是对数刻度) 当图形对应于指数增长时,y轴的对数刻度非常有用。如以下示例所示,图中0到1之间的y轴值会额外突出显示,而超出该值的个别异常值将变得越来越不重要: 但是,如果与上面的示例相比,图有某种相反的行为,其中小值不是很重要(噪声),但个别异常值应该显式可见,那么指数尺度是有用的:Delphi 具有TDBChart的轴的指数标度是否可能?,delphi,teechart,delphi-10-seattle,Delphi,Teechart,Delphi 10 Seattle,是否可以使用TDBChart的轴的指数刻度(而不是对数刻度) 当图形对应于指数增长时,y轴的对数刻度非常有用。如以下示例所示,图中0到1之间的y轴值会额外突出显示,而超出该值的个别异常值将变得越来越不重要: 但是,如果与上面的示例相比,图有某种相反的行为,其中小值不是很重要(噪声),但个别异常值应该显式可见,那么指数尺度是有用的: 那么,可以用TDBChart指数缩放轴吗?以下代码用指数数据填充一系列数据: uses Series, Math; procedure TForm1.FormC
那么,可以用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);
以下代码用指数数据填充序列:
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);
注意:指数是对数的倒数。如果轴上的对数属性没有给出您期望的结果,请安排@Yeray:是的,我知道指数和对数标度之间的联系。问题不在于数学基础。在TDBChart中,有一个内置选项,可以使用对数刻度。我想知道是否有可能操纵TDBChart中的轴以获得指数(通常为任意)刻度,或者是否有必要更改TDBChart的源代码以实现这一点。请注意,指数是对数的倒数。如果轴上的对数属性没有给出您期望的结果,请安排@Yeray:是的,我知道指数和对数标度之间的联系。问题不在于数学基础。在TDBChart中,有一个内置选项,可以使用对数刻度。我想知道是否有可能操纵TDBChart中的轴以获得指数(通常为任意)刻度,或者是否有必要更改TDBChart的源代码以实现这一点。谢谢!但这不是我需要的。(我需要类似于
Chart1.Axes.Left.Exponential:=true;
)的内容,我已为上述问题添加了其他详细信息。感谢您的帮助!事实上,我错了。第二个例子不是指数尺度。它是对数的,但只从1.2开始!0.1和1.2之间的图形被压缩在一起。的确,很奇怪。谢谢!但这不是我需要的。(我需要类似于Chart1.Axes.Left.Exponential:=true;
)的内容,我已为上述问题添加了其他详细信息。感谢您的帮助!事实上,我错了。第二个例子不是指数尺度。它是对数的,但只从1.2开始!0.1和1.2之间的图形被压缩在一起。的确,很奇怪。