首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在delphi中使用teechart从数据集中绘制堆叠条形图

如何在delphi中使用teechart从数据集中绘制堆叠条形图
EN

Stack Overflow用户
提问于 2013-06-05 21:13:30
回答 1查看 3.9K关注 0票数 5

我可以使用TeeChart在Delphi语言中创建一个堆叠的条形图。这是使用在循环中添加的值和序列。我更喜欢使用查询作为数据源来创建此图表,而不必将每个条形图作为单独的系列添加到循环中。有没有更好的方法,或者我应该看另一种类型的图表?这些数据是来自油井岩心样本的岩石类型的横截面。对于深度和岩石类型的每次测量,数据集都包含一条记录。它显示为岩石类型的单个垂直柱,就像岩心样品一样。

代码语言:javascript
复制
+----+
|    | 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,depth,'',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;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-06 16:56:55

尝试对您的TBarSeries使用mbSelfStack MultiBar样式。下面是一个示例:

代码语言:javascript
复制
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中的值将一个一个堆叠在另一个之上

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16940911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档