Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TChart "Gestapelte Säulen" (https://www.delphipraxis.net/104100-tchart-gestapelte-saeulen.html)

Sko 27. Nov 2007 12:53


TChart "Gestapelte Säulen"
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich muss mich gerade ein bisschen mit TChart rumschlagen und möchte ein Diagramm mit gestapelten Säulen erstellen. Geht das? Und wenn ja, wie? Ich hab mal ein Bild angehangen wie das werden soll. Es soll dargestellt werden wieviele Einheiten eines Materials in einem bestimmten Zeitraum für ein Produkt aufgewendet worden ist. Die Werte sind alle da und richtig, ich weis jetzt nur nicht wie ich die in das Chart bekommen soll. Über den Designer kann ich das nicht machen, da man zwischen verschiedenen Auswertungen wählen kann und dann je nach Auswahl unterschiedliche Diagramme erzeugt werden müssen. Ich hoffe ihr könnt mir helfen, vielen Dank schonmal.

soulies 27. Nov 2007 13:10

Re: TChart "Gestapelte Säulen"
 
hi,

wenn ich es richtig verstanden habe dann würde ich je nach material eine eigene bar-series benutzen

die kannst du ja dann hintereinander zeichnen lassen mit unterschiedlichen farben - sollte kein problem sein


-> also bei 3 Materialien = 3 Bar Series

dann erste zeichnen, dann zweite dann dritte ...

wenn du die y-werte aufrechnest kannst du ja zum max_y der erste series den wert der zweiten dazu addieren usw.
denn solltest du das ganze auch gestaffelt hinbekommen



cya

Sko 27. Nov 2007 13:18

Re: TChart "Gestapelte Säulen"
 
Ok, ich werd das mal ausprobieren, danke :thumb:

hincapie 27. Nov 2007 13:22

Re: TChart "Gestapelte Säulen"
 
Hier, aus dem Demo zu TChart, Auswahl der darstellung mit einer Radiogroup:
Delphi-Quellcode:
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
  { Four ways to plot bar Series: }
  Case RadioGroup1.ItemIndex of
    0: LineSeries1.MultiBar:=mbNone;
    1: LineSeries1.MultiBar:=mbSide;
    2: LineSeries1.MultiBar:=mbStacked;
    3: LineSeries1.MultiBar:=mbStacked100;
  end;
end;
So wie Du es haben willst, ist es mbStacked. :thumb:

Die LineSeries lass ich mir per Quelltext füllen, etwa so:
Delphi-Quellcode:
    for k := 0 to RecCount -1 do
    begin
      Value := Irgendein Integer-Wert
      LineSeries1.AddY(Value, Irgendein Datum, clRed);
    end;
    for l := 0 to RecCount -1 do
    begin
      Value := Irgendein anderer Integer-Wert
      LineSeries2.AddY(Value, Irgendein Datum, clGreen);
    end;

SaltJohn 9. Jan 2009 08:10

Re: TChart "Gestapelte Säulen"
 
Guten Morgen,

also ich habe etwas sehr ähnliches vor. Genauer gesagt möchte ich ein Balkendiagramm mit horzontal verlaufenden Balken darstellen, die wie oben erwähnt gestückelt/gestapelt sind. Habe mir über die Toolpalette ein Chart aufs Form gezogen das soweit auch funktioniert, doch leider komme ich mit dem Codeschnipsel unten nicht ganz zurecht.
Delphi-Quellcode:
LineSeries1.MultiBar:=mbStacked;
wird jedenfalls so nicht erkannt.

WIng2005 9. Jan 2009 08:33

Re: TChart "Gestapelte Säulen"
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

also ich hatte das mal so gelöst, dass ich 2 Series erzeugt, beiden den gleich x-Wert zugewiesen und
einem der beiden Balken die Summe aus beiden y-Werten zugewiesen hatte
(das ganze lief über ne DB, also nicht wegen dem Query wundern):

Delphi-Quellcode:
with DBCPuni_dbchart do
    Begin
      Series[0].Title :='roter Anteil' ;
      Series[0].SeriesColor :=clred ;
      Series[0].ValueFormat:='Wert1 1';
      Series[0].AddY((ZQuery1.fieldbyname('k').AsFloat+
                      ZQuery1.fieldbyname('x').AsFloat),
           formatdatetime('mm-yy',ZQuery1.fieldbyname('Datum').AsDateTime),
           (clred));
      Series[1].Title :='grüner Anteil' ;
      Series[1].SeriesColor :=clgreen ;
      Series[1].ValueFormat:='Wert 2';
      Series[1].AddY((ZQuery1.fieldbyname('x').AsFloat),
           formatdatetime('mm',ZQuery1.fieldbyname('Datum').AsDateTime),
           (clgreen));

    end;
MFG
Steffen

SaltJohn 9. Jan 2009 09:16

Re: TChart "Gestapelte Säulen"
 
Also irgendwo steh ich noch auf dem Schlauch. Bin ein wenig irritiert wo genau die Grenzen sein sollen.

Hier habe ich den unteren Teil des Balkens
Delphi-Quellcode:
Series[1].AddY((ZQuery1.fieldbyname('x').AsFloat),
           formatdatetime('mm',ZQuery1.fieldbyname('Datum').AsDateTime),
           (clgreen));
und hier den Aufsatz
Delphi-Quellcode:
Series[0].AddY((ZQuery1.fieldbyname('k').AsFloat+
                      ZQuery1.fieldbyname('x').AsFloat),
           formatdatetime('mm-yy',ZQuery1.fieldbyname('Datum').AsDateTime),
           (clred));
Weiß jetzt nicht genau wie ich das auf meine Daten übertrage. Möchte auf der x-Achse die Zeit auftragen und auf der Y-Achse sollen der Reihe nach die gestapelten Balken konstruiert werden. Leider funktioniert das noch nicht so richtig.
normalerweise sollte doch folgendes genügen

Delphi-Quellcode:
Series[0].AddY(Zeit1,'Balken1',clred);
normalerweise sollte doch
Delphi-Quellcode:
Series[1].AddY(Zeit1 + Zeit2,'Balken1',clgreen);
Aber irgendwie kommt bei mir nur Gulasch dabei rum.

WIng2005 9. Jan 2009 09:30

Re: TChart "Gestapelte Säulen"
 
Ich bin nicht sicher, ob es zwischen einem TChart und einem TDBChart diesbezüglich Unterschiede gibt.
Weißt du vorher, wieviele Balken gestapelt werden sollen?
Die Grenzen legst du mit der Eigenschaft Maximum fest..bei deinem Beispiel also:

Delphi-Quellcode:
DBCPuni_dbchart.LeftAxis.Maximum:=zeil1+tzeit2+Platz_nach_oben;

Zeig doch ggf. mal einen Screenshot


MFG
Steffen

SaltJohn 9. Jan 2009 10:01

Re: TChart "Gestapelte Säulen"
 
Also ich habs jetzt mal spasshalber auf vertikale Balken gestellt und jetzt scheint es zu funktionieren. Scheinbar muss man da noch etwas beachten wenn man die Balken horizontal darstellen möchte. Könntest du evtl. mal bei gelegenheit probieren ob eine solche Umschaltung bei dir funktioniert?

WIng2005 9. Jan 2009 10:13

Re: TChart "Gestapelte Säulen"
 
Ahhhhh, wenn du deine Balken horizontal darstellen willst, geht mein Beispiel natürlich nicht (das war für vertikale Darstellung).Versuche mal die Zuordnung zur Balken zu tauschen

also nicht
Delphi-Quellcode:
Series[0].AddY(Zeit1,'Balken1',clred);
sondern

Delphi-Quellcode:
Series[0].AddY('Balken1',Zeit1,clred);
MFG
Steffen


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:06 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz