gestapeltes Balkendiagramm - Farbe?

Rund um die LCL und andere Komponenten
Antworten
boeffi27
Beiträge: 11
Registriert: Fr 14. Mär 2014, 10:52

gestapeltes Balkendiagramm - Farbe?

Beitrag von boeffi27 »

Hallo in das Forum,

ich lasse zur Laufzeit ein TChart mit einem "gestapelten" Balkendiagramm (TBarseries) erzeugen (was ich auch hinbekommen habe).
Was ich verzweifelt suche, ist, wie ich es hinbekomme, die den Werten zugeordneten Balken unterschiedlich einzufärben. Im Netz habe ich leider kein Beispiel dazu gefunden. Hat hier einer eine Lösung parat?

Viele Grüße
boeffi27

wp_xyz
Beiträge: 5134
Registriert: Fr 8. Apr 2011, 09:01

Re: gestapeltes Balkendiagramm - Farbe?

Beitrag von wp_xyz »

Dazu braucht man eine ChartStyles-Komponente. Ich habe das ganze Procedere einmal in diesem Tutorial zusammengestellt: http://wiki.lazarus.freepascal.org/TACh ... _BarSeries

boeffi27
Beiträge: 11
Registriert: Fr 14. Mär 2014, 10:52

Re: gestapeltes Balkendiagramm - Farbe?

Beitrag von boeffi27 »

Hallo wp_xyz,

vielen Dank für den Link.
Im Prinzip habe ich es nun verstanden, wie es geht.
Jetzt fehlt mir nur noch der Code, wie ich das Chart zur Laufzeit mit dem TChartStyle einfärbe und verlinke.
Ich komme an dieser Stelle gerade nicht weiter.

Viele Grüße
boeffi27

wp_xyz
Beiträge: 5134
Registriert: Fr 8. Apr 2011, 09:01

Re: gestapeltes Balkendiagramm - Farbe?

Beitrag von wp_xyz »

Ich geb zu, das ist ein kleiner "Knochen" zum Zähneausbeißen, aber so geht's (einfaches Formular mit einem Chart, sonst nichts weiteres):

Code: Alles auswählen

 
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, TAGraph, TASources, Forms, Controls, Graphics,
  Dialogs, TASeries, TAStyles;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Chart1: TChart;
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
    StackedBarSeries: TBarSeries;
    ChartStyles: TChartStyles;
    procedure CreateStackedSeries;
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
uses
  TALegend;
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  CreateStackedSeries;
end;
 
procedure TForm1.CreateStackedSeries;
var
  i: Integer;
  x, y1, y2, y3: Double;
begin
  // ChartStyles erzeugen
  ChartStyles := TChartStyles.Create(self);
  with TChartStyle(ChartStyles.Styles.Add) do begin     // Für jeden Balken einen ChartStyle!
    Brush.Color := clRed;  // Farbe des untersten Balkens
    Text := 'Red';       // Legendeneintrag des untersten Balkens
  end;
  with TChartStyle(ChartStyles.Styles.Add) do begin
    Brush.Color := clBlue;  // Farbe des mittleren Balkens
    Text := 'Blue';
  end;
  with TChartStyle(ChartStyles.Styles.Add) do begin
    Brush.Color :=clYellow;  // Farbe des obersten Balkens
    Text := 'Yellow';
  end;
 
  // Eine einzige BarSeries erzeugen (nicht drei!)
  StackedBarSeries := TBarSeries.Create(self);
  Chart1.AddSeries(StackedBarSeries);
  StackedBarSeries.Styles := ChartStyles;
  StackedBarSeries.Legend.Multiplicity := lmStyle;
 
  // Daten einfügen: wir haben 3 Balken, also braucht die Series 3 y-Werte!
  StackedBarSeries.ListSource.YCount := 3;
  for i:=0 to 5 do
  begin
    x := i;
    y1 := Random;   // Nehme hier als Beispiel nur Zufallszahlen...
    y2 := Random;
    y3 := Random;
    StackedBarSeries.ListSource.AddXYList(x, [y1,y2,y3]);
    // So ist es etwas leichter zu lesen als beim "Standard-AddXY:
    // StackedBarSeries.AddXY(x, y1, [y2,y3]);
  end;
 
  // Legende einschalten
  Chart1.Legend.Visible := true;
end;
 
Dateianhänge
StackedBarSeries.png

boeffi27
Beiträge: 11
Registriert: Fr 14. Mär 2014, 10:52

Re: gestapeltes Balkendiagramm - Farbe? [gelöst]

Beitrag von boeffi27 »

Tausend Dank, ich habe es hinbekommen.
Selbst wäre ich aber nicht draufgekommen.

Gruß
boeffi27

Antworten