Skalierung, Bezeichnung Achse TChart
Skalierung, Bezeichnung Achse TChart
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"
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"
Re: Skalierung, Bezeichnung Achse TChart
So ganz verstehe ich deine Anforderung noch nicht. Poste doch bitte den Code, den du bisher verwendest.
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:
Ü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:
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).
Was meinst du mit "Objekte"? LineSeries?Die Linien sind eigene Objekte
Das widerspricht aber deinen Bildern, dann damit wären die Linien senkrecht.Sie haben einen "X-Wert" (1,2,3,4,5....) und zwei "Y-Werte"
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');
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;
Schau dir auch die Demos, die mit TAChart installiert werden, an - vielleicht findest du eine passende Vorlage. (Ordner (lazarus)/components/tachart/demo).
Re: Skalierung, Bezeichnung Achse TChart
Code: Alles auswählen
Chart1LineSeries1.AddXY(x, y, 'ein Label');
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).
Re: Skalierung, Bezeichnung Achse TChart
Dann hilft dir vielleicht auch noch der Hinweis aufUnd vielen Dank (!!!!) für diesen Tipp
- die TAChart-Dokumentation (http://wiki.lazarus.freepascal.org/TACh ... umentation),
- die Tutorials (http://wiki.lazarus.freepascal.org/Category:TAChart)
- und den (noch unvollständigen) User Guide (http://wiki.lazarus.freepascal.org/TAChart_User_Guide).
Re: Skalierung, Bezeichnung Achse TChart
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 ...
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;
Re: Skalierung, Bezeichnung Achse TChart
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):
Die Zeile
ist m.E. nicht richtig, Es sollte
heißen
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;
Code: Alles auswählen
Mittelpunkt.Marks.Style := Mittelpunkt.Marks.Style.smsLabel;
Code: Alles auswählen
Mittelpunkt.Marks.Style := smsLabel;