Skalierung, Bezeichnung Achse TChart

Rund um die LCL und andere Komponenten
Antworten
1660
Beiträge: 10
Registriert: Do 19. Dez 2013, 10:35

Skalierung, Bezeichnung Achse TChart

Beitrag von 1660 »

Guten Morgen,

es geht um die Skalierung und Bezeichnung der "bottom axis". Das Zeichnen der Series funktioniert einwandfrei, nun möchte ich die bottom axis aber, wie im Anhang zu sehen, anpassen. Also anstatt zahlen sollen dort strings stehen. Der Abstand soll auch einstellbar sein.

Hat jemand eine Idee wie man das lösen kann ?

Viele Grüße


edit: Die Linien sind eigene Objekte. Sie haben einen "X-Wert" (1,2,3,4,5....) und zwei "Y-Werte"
Dateianhänge
Unbenannt.PNG

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

Re: Skalierung, Bezeichnung Achse TChart

Beitrag von wp_xyz »

So ganz verstehe ich deine Anforderung noch nicht. Poste doch bitte den Code, den du bisher verwendest.
Die Linien sind eigene Objekte
Was meinst du mit "Objekte"? LineSeries?
Sie haben einen "X-Wert" (1,2,3,4,5....) und zwei "Y-Werte"
Das widerspricht aber deinen Bildern, dann damit wären die Linien senkrecht.

Generell - vielleicht hilft diese Information schon weiter -: Wenn du eine Series per "AddXY" mit Daten befüllst, dann kannst du auch einen Text als Datenlabel mit angeben:

Code: Alles auswählen

 
  Chart1LineSeries1.AddXY(x, y, 'ein Label');
 
Über die x-Werte kannst du den "Abstand" der x-Werte voneinander einstellen.

Um die Labels an der x-Achse anzuzeigen, musst du zur Laufzeit der ChartSource der BottomAxis.Marks die ChartSource der Series zuweisen - wenn du wie oben die Serie mit AddxY mit Daten füllst, findest du die ChartSource der Series in der Eigenschaft Chart1LineSeries1.ListSource. Also:

Code: Alles auswählen

 
  Chart1.BottomAxis.Marks.Source := Chart1LineSeries1.ListSource;
 
Außerdem muss die Eigenschaft Style der BottomAxis.Marks auf smsLabel umgeschaltet werden, damit nun die den x-Werten zugeordneten Labels statt der Zahlen angezeigt werden.

Schau dir auch die Demos, die mit TAChart installiert werden, an - vielleicht findest du eine passende Vorlage. (Ordner (lazarus)/components/tachart/demo).

1660
Beiträge: 10
Registriert: Do 19. Dez 2013, 10:35

Re: Skalierung, Bezeichnung Achse TChart

Beitrag von 1660 »

Code: Alles auswählen

Chart1LineSeries1.AddXY(x, y, 'ein Label');
das hier löst mein Problem. Danke =)


Und vielen Dank (!!!!) für diesen Tipp:
wp_xyz hat geschrieben:Schau dir auch die Demos, die mit TAChart installiert werden, an - vielleicht findest du eine passende Vorlage. (Ordner (lazarus)/components/tachart/demo).

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

Re: Skalierung, Bezeichnung Achse TChart

Beitrag von wp_xyz »

Und vielen Dank (!!!!) für diesen Tipp
Dann hilft dir vielleicht auch noch der Hinweis auf

1660
Beiträge: 10
Registriert: Do 19. Dez 2013, 10:35

Re: Skalierung, Bezeichnung Achse TChart

Beitrag von 1660 »

Hallo nochmal,

also mittlerweile funktioniert alles ganz gut (siehe Bild).

Wieso gehen die Linien manchmal durch die Labels und manchmal nicht ?^^


Ich erstelle erst die Linie und danach eine "Linie" mit nur einem Punkt und dem Label ...

Code: Alles auswählen

 
 for i1 := 0 to Length(Linien) - 1 do
  begin
 
    Graph := TLineSeries.Create(Chart2);
 
    Graph.AddXY(Linien[i1].FX - 0.4, Linien[i1].FY1);
    Graph.AddXY(Linien[i1].FX + 0.4, Linien[i1].FY2);
 
    Graph.Pointer.Style := Graph.Pointer.Style.psCircle;
    Graph.ShowPoints := True;
 
    Chart2.AddSeries(Graph);
 
 
    Mittelpunkt := TlineSeries.Create(Chart2);
 
    Mittelpunkt.AddXY(Linien[i1].FX, Mittelwert, Linien[i1].FBez);
 
    Mittelpunkt.Marks.Distance := 0;
    Mittelpunkt.Marks.Style := Mittelpunkt.Marks.Style.smsLabel;
 
    Chart2.AddSeries(Mittelpunkt);                  //Mittelpunkt(double) wird vorher berechnet
 
  end;     
 
Dateianhänge
Unbenannt.PNG

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

Re: Skalierung, Bezeichnung Achse TChart

Beitrag von wp_xyz »

Dein Vorgehen erscheint mir richtig zu sein. Vielleicht hilf es, die Ausgabereihenfolge mit Hilfe des ZPosition Parameters zu ändern und die Reihen ohne Label zuerst, und die mit Label zum Schluss zu zeichnen, etwa so (ohne Gewähr):

Code: Alles auswählen

 
for i:=0 to Chart2.SeriesCount-1 do begin
  if (Chart2.Series[i] is TLineSeries) then begin
    if  (TLineSeries(Chart2.Series[i]).Marks.Style <> smsLabel) then
      Chart2.Series[i].ZPosition := 1;    // Datenreihen ohne Label unten
    if (TLineSeries(Chart2.Series[i]),Marks.Style = smsLabel) then
      Chart2.Series[i].ZPosition := 2;   // Datenreihen mit Lbel oben
  end;
end;
 
Die Zeile

Code: Alles auswählen

Mittelpunkt.Marks.Style := Mittelpunkt.Marks.Style.smsLabel;
ist m.E. nicht richtig, Es sollte

Code: Alles auswählen

Mittelpunkt.Marks.Style := smsLabel;
heißen

Antworten