5

TeeChart を使用して、Delphi で積み上げ棒グラフを作成できます。これは、ループで追加された値とシリーズを使用しています。クエリをデータソースとして使用するだけでこのグラフを作成し、各バーをループ内の個別のシリーズとして追加する必要はありません。これを行うためのより良い方法、または私が見るべき別のタイプのチャートはありますか? データは、坑井コア サンプルからの岩石タイプの断面です。データセットには、深さと岩の種類の測定ごとに 1 つのレコードが含まれています。コアのサンプルと同様に、岩石の種類が縦に 1 列に表示されます。

+----+
|    | 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;
4

1 に答える 1

3

mbSelfStack MultiBarのスタイルを使用してみてくださいTBarSeries。次に例を示します。

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 の値が上下に積み上げられます。

于 2013-06-06T08:56:55.260 に答える