如何使用delphi中的teechart从数据集中执行堆积条形图
发布时间:2020-12-15 04:11:02 所属栏目:大数据 来源:网络整理
导读:我可以使用TeeChart在Delphi中创建堆叠条形图.这是使用循环中添加的值和系列.我更喜欢通过使用查询作为数据源来创建此图表,而不必将每个条形图添加为循环内的单独系列.有没有更好的方法来做到这一点,或者我应该关注的其他类型的图表?该数据是来自井核样本的
|
我可以使用TeeChart在Delphi中创建堆叠条形图.这是使用循环中添加的值和系列.我更喜欢通过使用查询作为数据源来创建此图表,而不必将每个条形图添加为循环内的单独系列.有没有更好的方法来做到这一点,或者我应该关注的其他类型的图表?该数据是来自井核样本的岩石类型的横截面.数据集包含每个深度和岩石类型测量的记录.它显示为岩石类型的单个垂直列,就像核心样本一样.
+----+
| | record 1 - depth1,rock type 1
| |
+----+
| |
| |
| | record 2 - depth2,rock type 2
| |
+----+
| | record 3 - depth3,rock type 3
+----+
procedure TForm128.GenerateLithologyChart;
var
LSeries: TBarSeries;
i : integer;
LastBot : double;
procedure AddRockSeries(depth : double; col : TColor);
begin
LSeries := TBarSeries.Create(LithologyChart);
LithologyChart.AddSeries(LSeries);
LSeries.AddBar(0,'',clBlue);
if col=clNone then
LSeries.AddNullXY(0,depth,'')
else
LSeries.AddXY(0,col);
LSeries.Marks.Visible := False;
LSeries.MultiBar := mbStacked;
LSeries.CustomBarWidth := 80;
end;
begin
LithologyChart.LeftAxis.Inverted := True;
LithologyChart.Title.Text.Text := 'Well Lithology - data-aware test';
LithologyChart.SeriesList.Clear;
AdoQuery1.First;
i := 0;
LastBot := 0;
while not AdoQuery1.Eof do begin
if abs(AdoQuery1.FieldByName('Strata Top').asFloat-LastBot) > 0.0005 then begin
// create blank cross section for the missing depth range
AddRockSeries(AdoQuery1.FieldByName('Strata Top').asFloat-LastBot,clNone);
end;
AddRockSeries(AdoQuery1.FieldByName('Strata Bottom').asFloat-AdoQuery1.FieldByName('Strata Top').asFloat,clRed);
LastBot := AdoQuery1.FieldByName('Strata Bottom').asFloat;
inc(i);
//if i = 3 then break;
AdoQuery1.Next;
end;
AdoQuery1.First;
end;
解决方法
尝试为TBarSeries使用mbSelfStack MultiBar样式.这是一个例子:
procedure TForm1.FormCreate(Sender: TObject);
begin
Chart1.View3D:=false;
with Chart1.AddSeries(TBarSeries) as TBarSeries do
begin
Marks.Visible:=false;
MultiBar:=mbSelfStack;
FillSampleValues;
end;
end;
使用此样式,单个TBarSeries中的值将堆叠在一起 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
