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;