Hello!
1.) I have another question, that is (maybe) easy to answer: when generating a Boxplot-series at position x is there a possibility to name the corrosponding point on th bottom axis? I would like to have the string that can be found in 'name' (source below) on the bottom axis instead of 0, 1, 2, 3.....).
2.) the same with a tower-series.is there a possibility to write names on the bottom and depth axis instead of values (second code below) ?
if frmDataMining.DescriptiveColRadio.Checked then
begin
Chart1.Title.Text.Clear;
Chart1.Title.Text.Add('Boxplots / columns');
Chart1.View3D := False;
Chart1.ApplyZOrder := False;
for RunnerX := ErsteSpalte to LetzteSpalte do
begin
ValueNo := ValuesInColumn(frmMiningResults.ResultStringGrid, RunnerX, ErsteZeile, LetzteZeile);// check if there is more than text or empty fields
If ValueNo > 0 THen
Begin
Name := frmMiningResults.ResultStringGrid.Cells[RunnerX, 0]; // get the name from the table header
Chart1.AddSeries(TBoxSeries.Create(Self));
(Chart1[RunnerX - ErsteSpalte] as TBoxSeries).AreaColor := clRed;
(Chart1[RunnerX - ErsteSpalte] as TBoxSeries).Title := Name;
(Chart1[RunnerX - ErsteSpalte] as TBoxSeries).Position := RunnerX - ErsteSpalte;
(Chart1[RunnerX - ErsteSpalte] as TBoxSeries).Box.Color := clBlue;
(Chart1[RunnerX - ErsteSpalte] as TBoxSeries).AreaLinesPen.Visible := True;
(Chart1[RunnerX - ErsteSpalte] as TBoxSeries).VertAxis := aLeftAxis;
(Chart1[RunnerX - ErsteSpalte] as TBoxSeries).HorizAxis := aBottomAxis;
Repeater := 0;
SetLength (SortierteListe, ValueNo);
for RunnerY := ErsteZeile to LetzteZeile do // get all the values from the column
begin
DummyString := frmMiningResults.ResultStringGrid.Cells[RunnerX, RunnerY];
If TryStrToFloat (DummyString, DummyExtended) THen
Begin
SortierteListe [Repeater] := DummyExtended;
Inc (Repeater);
end;
end;
Quicksort (SortierteListe, 0, High (SortierteLIste)); // and sort them for the box plot
for RunnerY := 0 to High(SortierteListe) do
begin
(Chart1[RunnerX - ErsteSpalte] as TBoxSeries).Add (SortierteListe[RunnerY], name, clRed);
end;
end;
end;
end;
----------------------------------------
if frmDataMining.PercentGridRadio.Checked then
begin
Chart1.Title.Text.Clear;
Chart1.Title.Text.Add('Percent / grid');
Chart1.AddSeries(TTowerSeries.Create(Self));
(Chart1[0] as TTowerSeries).Clear;
(Chart1[0] as TTowerSeries).Title := 'Proportions in the grid';
(Chart1[0] as TTowerSeries).UseColorRange := True;
for RunnerY := LetzteZeile downto ErsteZeile do
begin
for RunnerX := ErsteSpalte to LetzteSpalte do
begin
DummyString := frmMiningResults.ResultStringGrid.Cells[RunnerX, RunnerY];
if TryStrToFloat(Copy(DummyString, 1, Length(DummyString) - 1), DummyExtended) then
begin
(Chart1[0] as TTowerSeries).AddXYZ(RunnerX - ErsteSpalte, DummyExtended, RunnerY-LetzteZeile);
end
else
begin
(Chart1[0] as TTowerSeries).Addxyz(RunnerX - ErsteSpalte, 0, RunnerY-LetzteZeile);
end;
end;
end;
end;
Strings instead of values on an axis?
Hi Jan,
1) Have you tried to set the Bottom axis labels to "text"? :
Chart1.Axes.Bottom.LabelStyle := talText;
2) You can access individual depth axis labels and customize them via the OnGetAxisLabel and OnGetNextAxisLabel events:
1) Have you tried to set the Bottom axis labels to "text"? :
Chart1.Axes.Bottom.LabelStyle := talText;
2) You can access individual depth axis labels and customize them via the OnGetAxisLabel and OnGetNextAxisLabel events:
Code: Select all
procedure TForm1.FormCreate(Sender: TObject);
begin
Series1.FillSampleValues(6);
end;
procedure TForm1.Chart1GetAxisLabel(Sender: TChartAxis;
Series: TChartSeries; ValueIndex: Integer; var LabelText: String);
begin
if Sender.IsDepthAxis then LabelText := 'Depth';
end;
Pep Jorge
http://support.steema.com
http://support.steema.com
Thanks,
but i am searching for a solution like chart1[x].xlabel[position] := 'text''.
The problem is that there are many procedures who try to draw on one chart. Sometimes at different times and sometimes some are excluded from drawing, while others are not.
Now i would like to have solution being as easy as possible to include it within the same procedure. When drawing the boxplots i place them with the position command (otherwise they would be drawn all on the same position). All are using the bottom and the left axis. Now i search for something to say: Instead of value 1 on the bottomaxis i would like to have the string 'Boxplot 2'.
For one series (like a ttowerseries) it is no problem and the (xlabel[position] := 'xyz') works correctly. But when generating several of boxplotseries i can't manage it. I am not really sure if it is a problem of the code. Maybe i havent seen a property that should be set to a special value. When generating a simple project it works! The code below just draws the strings for the smaller range between (ErsteZeile to LetzteZeile) and (ErsteSpalte to LetzteSpalte).....
And finally: is there another chance to get access for the depthaxis?
Thanks
Jan
----------------------------------------------------
This is working:
procedure TForm1.BitBtn1Click(Sender: TObject);
Var FirstColumn : Integer;
LastColumn : Integer;
RunnerY : Integer;
RunnerX : Integer;
RandomValue : Double;
begin
Chart1.RemoveAllSeries;
Chart1.View3D := False;
Chart1.ApplyZOrder := False;
Chart1.BottomAxis.LabelStyle := talText;
Chart1.BottomAxis.LabelsAngle := 340;
Chart1.BottomAxis.LabelsSeparation := 0;
Chart1.BottomAxis.Title.Caption := 'Rows';
Chart1.LeftAxis.Title.Caption := 'Values';
FirstColumn := 1;
LastColumn := 10;
for RunnerY := FirstColumn to LastColumn do
begin
Name := 'FakeName'+ IntToStr (RunnerY);
Chart1.AddSeries(TBoxSeries.Create(Self));
(Chart1[RunnerY - FirstColumn] as TBoxSeries).AreaColor := clRed;
(Chart1[RunnerY - FirstColumn] as TBoxSeries).Title := Name;
(Chart1[RunnerY - FirstColumn] as TBoxSeries).Position := RunnerY - FirstColumn;
(Chart1[RunnerY - FirstColumn] as TBoxSeries).Box.Color := clBlue;
(Chart1[RunnerY - FirstColumn] as TBoxSeries).VertAxis := aLeftAxis;
(Chart1[RunnerY - FirstColumn] as TBoxSeries).HorizAxis := aBottomAxis;
RandomValue := Random(100);
For RunnerX := 1 to 10 do
Begin
(Chart1[RunnerY - FirstColumn] as TBoxSeries).Add (RunnerX*RandomValue, '', clTeeColor);;
end;
(Chart1[RunnerY - FirstColumn] as TBoxSeries).Xlabel[RunnerY - FirstColumn] := Name;
end;
end;
--------------------------------------------
and this is not working... :
if frmDataMining.DescriptiveColRadio.Checked then
begin
Chart1.Title.Text.Clear;
Chart1.Title.Text.Add('Boxplots / columns');
Chart1.View3D := False;
Chart1.ApplyZOrder := False;
Chart1.BottomAxis.LabelStyle := talText;
Chart1.BottomAxis.LabelsAngle := 340;
Chart1.BottomAxis.LabelsSeparation := 0;
Chart1.BottomAxis.Title.Caption := 'Columns';
Chart1.LeftAxis.Title.Caption := 'Values';
for RunnerX := ErsteSpalte to LetzteSpalte do
begin
ValueNo := ValuesInColumn(frmMiningResults.ResultStringGrid, RunnerX, ErsteZeile, LetzteZeile);
If ValueNo > 0 THen
Begin
Name := frmMiningResults.ResultStringGrid.Cells[RunnerX, 0];
Chart1.AddSeries(TBoxSeries.Create(Self));
(Chart1[RunnerX - ErsteSpalte] as TBoxSeries).AreaColor := clRed;
(Chart1[RunnerX - ErsteSpalte] as TBoxSeries).Title := Name;
(Chart1[RunnerX - ErsteSpalte] as TBoxSeries).Position := RunnerX - ErsteSpalte;
(Chart1[RunnerX - ErsteSpalte] as TBoxSeries).Box.Color := clBlue;
(Chart1[RunnerX - ErsteSpalte] as TBoxSeries).MedianPen.Color := clRed;
(Chart1[RunnerX - ErsteSpalte] as TBoxSeries).AreaLinesPen.Visible := True;
(Chart1[RunnerX - ErsteSpalte] as TBoxSeries).VertAxis := aLeftAxis;
(Chart1[RunnerX - ErsteSpalte] as TBoxSeries).HorizAxis := aBottomAxis;
Repeater := 0;
SetLength (SortierteListe, ValueNo); // getting the values from the column
for RunnerY := ErsteZeile to LetzteZeile do
begin
DummyString := frmMiningResults.ResultStringGrid.Cells[RunnerX, RunnerY];
If TryStrToFloat (DummyString, DummyExtended) THen
Begin
SortierteListe [Repeater] := DummyExtended;
Inc (Repeater);
end;
end;
Quicksort (SortierteListe, 0, High (SortierteLIste)); // sorting them
for RunnerY := 0 to High(SortierteListe) do // and display as boxplots
begin
(Chart1[RunnerX - ErsteSpalte] as TBoxSeries).Add (SortierteListe[RunnerY], '', clRed);
end;
(Chart1[RunnerX - ErsteSpalte]).XLabel[RunnerX-ErsteSpalte] := Name;
end;
end;
end;
but i am searching for a solution like chart1[x].xlabel[position] := 'text''.
The problem is that there are many procedures who try to draw on one chart. Sometimes at different times and sometimes some are excluded from drawing, while others are not.
Now i would like to have solution being as easy as possible to include it within the same procedure. When drawing the boxplots i place them with the position command (otherwise they would be drawn all on the same position). All are using the bottom and the left axis. Now i search for something to say: Instead of value 1 on the bottomaxis i would like to have the string 'Boxplot 2'.
For one series (like a ttowerseries) it is no problem and the (xlabel[position] := 'xyz') works correctly. But when generating several of boxplotseries i can't manage it. I am not really sure if it is a problem of the code. Maybe i havent seen a property that should be set to a special value. When generating a simple project it works! The code below just draws the strings for the smaller range between (ErsteZeile to LetzteZeile) and (ErsteSpalte to LetzteSpalte).....
And finally: is there another chance to get access for the depthaxis?
Thanks
Jan
----------------------------------------------------
This is working:
procedure TForm1.BitBtn1Click(Sender: TObject);
Var FirstColumn : Integer;
LastColumn : Integer;
RunnerY : Integer;
RunnerX : Integer;
RandomValue : Double;
begin
Chart1.RemoveAllSeries;
Chart1.View3D := False;
Chart1.ApplyZOrder := False;
Chart1.BottomAxis.LabelStyle := talText;
Chart1.BottomAxis.LabelsAngle := 340;
Chart1.BottomAxis.LabelsSeparation := 0;
Chart1.BottomAxis.Title.Caption := 'Rows';
Chart1.LeftAxis.Title.Caption := 'Values';
FirstColumn := 1;
LastColumn := 10;
for RunnerY := FirstColumn to LastColumn do
begin
Name := 'FakeName'+ IntToStr (RunnerY);
Chart1.AddSeries(TBoxSeries.Create(Self));
(Chart1[RunnerY - FirstColumn] as TBoxSeries).AreaColor := clRed;
(Chart1[RunnerY - FirstColumn] as TBoxSeries).Title := Name;
(Chart1[RunnerY - FirstColumn] as TBoxSeries).Position := RunnerY - FirstColumn;
(Chart1[RunnerY - FirstColumn] as TBoxSeries).Box.Color := clBlue;
(Chart1[RunnerY - FirstColumn] as TBoxSeries).VertAxis := aLeftAxis;
(Chart1[RunnerY - FirstColumn] as TBoxSeries).HorizAxis := aBottomAxis;
RandomValue := Random(100);
For RunnerX := 1 to 10 do
Begin
(Chart1[RunnerY - FirstColumn] as TBoxSeries).Add (RunnerX*RandomValue, '', clTeeColor);;
end;
(Chart1[RunnerY - FirstColumn] as TBoxSeries).Xlabel[RunnerY - FirstColumn] := Name;
end;
end;
--------------------------------------------
and this is not working... :
if frmDataMining.DescriptiveColRadio.Checked then
begin
Chart1.Title.Text.Clear;
Chart1.Title.Text.Add('Boxplots / columns');
Chart1.View3D := False;
Chart1.ApplyZOrder := False;
Chart1.BottomAxis.LabelStyle := talText;
Chart1.BottomAxis.LabelsAngle := 340;
Chart1.BottomAxis.LabelsSeparation := 0;
Chart1.BottomAxis.Title.Caption := 'Columns';
Chart1.LeftAxis.Title.Caption := 'Values';
for RunnerX := ErsteSpalte to LetzteSpalte do
begin
ValueNo := ValuesInColumn(frmMiningResults.ResultStringGrid, RunnerX, ErsteZeile, LetzteZeile);
If ValueNo > 0 THen
Begin
Name := frmMiningResults.ResultStringGrid.Cells[RunnerX, 0];
Chart1.AddSeries(TBoxSeries.Create(Self));
(Chart1[RunnerX - ErsteSpalte] as TBoxSeries).AreaColor := clRed;
(Chart1[RunnerX - ErsteSpalte] as TBoxSeries).Title := Name;
(Chart1[RunnerX - ErsteSpalte] as TBoxSeries).Position := RunnerX - ErsteSpalte;
(Chart1[RunnerX - ErsteSpalte] as TBoxSeries).Box.Color := clBlue;
(Chart1[RunnerX - ErsteSpalte] as TBoxSeries).MedianPen.Color := clRed;
(Chart1[RunnerX - ErsteSpalte] as TBoxSeries).AreaLinesPen.Visible := True;
(Chart1[RunnerX - ErsteSpalte] as TBoxSeries).VertAxis := aLeftAxis;
(Chart1[RunnerX - ErsteSpalte] as TBoxSeries).HorizAxis := aBottomAxis;
Repeater := 0;
SetLength (SortierteListe, ValueNo); // getting the values from the column
for RunnerY := ErsteZeile to LetzteZeile do
begin
DummyString := frmMiningResults.ResultStringGrid.Cells[RunnerX, RunnerY];
If TryStrToFloat (DummyString, DummyExtended) THen
Begin
SortierteListe [Repeater] := DummyExtended;
Inc (Repeater);
end;
end;
Quicksort (SortierteListe, 0, High (SortierteLIste)); // sorting them
for RunnerY := 0 to High(SortierteListe) do // and display as boxplots
begin
(Chart1[RunnerX - ErsteSpalte] as TBoxSeries).Add (SortierteListe[RunnerY], '', clRed);
end;
(Chart1[RunnerX - ErsteSpalte]).XLabel[RunnerX-ErsteSpalte] := Name;
end;
end;
end;