TAChart untypische X-Achse - wie umgehen ?
- af0815
- Lazarusforum e. V.
- Beiträge: 7062
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
TAChart untypische X-Achse - wie umgehen ?
Ich schreibe an einer Applikation die Blutzuckerwerte vernünftig darstellen soll, da es für meine Meßgeräte (Contour) kein Programm für Linux gibt (Der erste Teil, die Daten zu bekommen ist mal halbwegs gelöst).
Ich habe die Daten generell im Format
X= Datum + Uhrzeit im ISO8601 Format
Y = der gemessene Wert.
Die Daten sind für die Auswertung in einer TCollection in den Items gespeichert. Ich habe zum Beispiel die Daten von einem Monat, drei Monate, wie auch immer in der Collection. Die Collection kann ich zum Beispiel nach Datum/Zeit sortieren und im TAChart anzeigen. Das geht so halbwegs.
Sortiere ich die Daten jetzt nach Uhrzeit (oder auch Wochentag) gruppiert, kann ich diese nicht im Chart nach Stunden aufgegliedert anzeigen. Ich bräuchte auf der X-Achse die Stunden (oder Wochentage) angezeigt - auch von den Stunden (Tagen) an denen es keine Daten gibt.
Nur irgendwie fehlt mir da die Kenntnis von TAChart. Und in den ganzen Beispielen die mitgeliefert sind, ist IMHO nichts dabei wo ich Verständnis finden kann. Das "Population 2" kommt noch am nähesten, ich habe es aber nicht geschafft daraus was zu machen.
Ich habe ein Demoprogramm beigelegt, das Demodaten erzeugen kann und auch anzeigen (zumindest die Datum/Zeit sortierten). Ist für "Fixes" backported.
Vielleicht kann mir jemand einen Schubs (oder Tritt in den A) geben.
Anleitung:
*) Starten
*) Enable Frame drücken
*) Demo Data drücken
-> Test DT = Auswertung nach Datum/ Zeit (hier einmal auf ein Monat begrenzt)
-> Test T = Wäre Auswertung nach Tag - aber hier keine Ahnung
Die jeweiligen sortierten Daten liegen im Grid unter Daten.
Ich habe die Daten generell im Format
X= Datum + Uhrzeit im ISO8601 Format
Y = der gemessene Wert.
Die Daten sind für die Auswertung in einer TCollection in den Items gespeichert. Ich habe zum Beispiel die Daten von einem Monat, drei Monate, wie auch immer in der Collection. Die Collection kann ich zum Beispiel nach Datum/Zeit sortieren und im TAChart anzeigen. Das geht so halbwegs.
Sortiere ich die Daten jetzt nach Uhrzeit (oder auch Wochentag) gruppiert, kann ich diese nicht im Chart nach Stunden aufgegliedert anzeigen. Ich bräuchte auf der X-Achse die Stunden (oder Wochentage) angezeigt - auch von den Stunden (Tagen) an denen es keine Daten gibt.
Nur irgendwie fehlt mir da die Kenntnis von TAChart. Und in den ganzen Beispielen die mitgeliefert sind, ist IMHO nichts dabei wo ich Verständnis finden kann. Das "Population 2" kommt noch am nähesten, ich habe es aber nicht geschafft daraus was zu machen.
Ich habe ein Demoprogramm beigelegt, das Demodaten erzeugen kann und auch anzeigen (zumindest die Datum/Zeit sortierten). Ist für "Fixes" backported.
Vielleicht kann mir jemand einen Schubs (oder Tritt in den A) geben.
Anleitung:
*) Starten
*) Enable Frame drücken
*) Demo Data drücken
-> Test DT = Auswertung nach Datum/ Zeit (hier einmal auf ein Monat begrenzt)
-> Test T = Wäre Auswertung nach Tag - aber hier keine Ahnung
Die jeweiligen sortierten Daten liegen im Grid unter Daten.
- Dateianhänge
-
- Bildschirmfoto vom 2026-01-12 11-42-21.png (65.79 KiB) 295 mal betrachtet
-
AnalyseDemo.zip- (101.06 KiB) 50-mal heruntergeladen
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- Zvoni
- Beiträge: 503
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
- CPU-Target: 64Bit
- Wohnort: BW
Re: TAChart untypische X-Achse - wie umgehen ?
Hmm....
Heisst:
Du willst z.B. auf den 13. November "reinzoomen", hast aber das Problem, dass du für eine 24h-Zeitachse keine Daten zu "jeder" Stunde hast, korrekt?
Heisst:
Du willst z.B. auf den 13. November "reinzoomen", hast aber das Problem, dass du für eine 24h-Zeitachse keine Daten zu "jeder" Stunde hast, korrekt?
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
- af0815
- Lazarusforum e. V.
- Beiträge: 7062
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: TAChart untypische X-Achse - wie umgehen ?
Ich will nicht reinzoomen. Sondern die Daten sauber nach X Achse angezeigt.
Du brauchst als Diabetiker einfache Infos, wo du in der Therapie ansetzt. Daher zum Beispiel ob es immer um eine Uhrzeit oder mit einem Tag eine Aufälligkeit gibt.
Beispiel immer am Sonntag, nach Omas Backwaren stimmt der Blutzucker nicht
Dann muss man halt, die Oma an verschiedenen Tagen besuchen um die Statistik auszugleich. 
Du brauchst als Diabetiker einfache Infos, wo du in der Therapie ansetzt. Daher zum Beispiel ob es immer um eine Uhrzeit oder mit einem Tag eine Aufälligkeit gibt.
Beispiel immer am Sonntag, nach Omas Backwaren stimmt der Blutzucker nicht
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- Zvoni
- Beiträge: 503
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
- CPU-Target: 64Bit
- Wohnort: BW
Re: TAChart untypische X-Achse - wie umgehen ?
Versteh ich noch immer nicht so ganz.
Ich hab mich halt auf dies hier bezogen
Ich hab mich halt auf dies hier bezogen
Erinnert mich stark an das Thema "Calendar-Table", was ich von Datenbanken her kenneIch bräuchte auf der X-Achse die Stunden (oder Wochentage) angezeigt - auch von den Stunden (Tagen) an denen es keine Daten gibt.
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
- af0815
- Lazarusforum e. V.
- Beiträge: 7062
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: TAChart untypische X-Achse - wie umgehen ?
Das Kalendertage Problem habe ich hier nicht direkt, da man das alles sehr gut rechnen kann. Eine TList oder Collection ist gleich "on the fly" gerechnet.
Das Problem ist die extreme flexibilität von TAChart. Da ist soviel zur Design Zeit an 1000 stellen zu konfigurieren, das man ohne erste Anleitung oft "lost" ist.
Das Problem ist die extreme flexibilität von TAChart. Da ist soviel zur Design Zeit an 1000 stellen zu konfigurieren, das man ohne erste Anleitung oft "lost" ist.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- kupferstecher
- Beiträge: 437
- Registriert: Do 17. Nov 2016, 11:52
Re: TAChart untypische X-Achse - wie umgehen ?
Das heißt du willst z.B. die Aufzeichnung von 10 Wochen in einem einwöchigen Diagramm übereinanderlegen, sodass man Systematiken sieht?
In dem Fall könntest du für jede Woche eine eigene Kurve in das gemeinsame Diagramm schreiben, dann wären sogar Linien zwischen den Punkten möglich. Ich vermute da geht es nicht ohne eigene Datenaufbereitung im Hintergrund.
In dem Fall könntest du für jede Woche eine eigene Kurve in das gemeinsame Diagramm schreiben, dann wären sogar Linien zwischen den Punkten möglich. Ich vermute da geht es nicht ohne eigene Datenaufbereitung im Hintergrund.
- af0815
- Lazarusforum e. V.
- Beiträge: 7062
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: TAChart untypische X-Achse - wie umgehen ?
Wie im Beispiel ist es besser mit Punkten zu arbeiten. Die Datenaufbereitung im Hintergrund ist NICHT das Problem. Nur die Darstellung im TAChart.kupferstecher hat geschrieben: Mo 12. Jan 2026, 13:09 Das heißt du willst z.B. die Aufzeichnung von 10 Wochen in einem einwöchigen Diagramm übereinanderlegen, sodass man Systematiken sieht?
In dem Fall könntest du für jede Woche eine eigene Kurve in das gemeinsame Diagramm schreiben, dann wären sogar Linien zwischen den Punkten möglich. Ich vermute da geht es nicht ohne eigene Datenaufbereitung im Hintergrund.
Und diese Grafiken sind nichts spezielles, was ich mir ausgedacht habe, sondern für die Insulintherapie/Diabetestherapie normal. Nur sind die vorhandenen Programme entweder für Android/iOS mit (verkaufbaren)Daten in der Cloud oder für Windows only.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- Zvoni
- Beiträge: 503
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
- CPU-Target: 64Bit
- Wohnort: BW
Re: TAChart untypische X-Achse - wie umgehen ?
Auf Basis von kupferstechers Antwort hab ich es jetzt verstanden.
Hmm...... ich glaube ich hab sowas in Excel.... müsste mal schauen, wie da die Achsenzuweisungen heissen.
Läuft im Prinzip darauf hinaus, dass deine X-Achsen-Beschriftung z.B. deine Wochentage sind.
Deine sequentiellen Daten musst du dann aber in ein "2D"-Format bringen (Spalten=Wochentage, Zeilen=Die "eigentliche" Woche).
Und das wäre der "Datenbereich"
Wenn ich mich recht erinner, ist dann so eine "Zeile" in den 2D-Daten eine "SeriesCollection" oder so ähnlich
EDIT: Ich glaub ich hab was gefunden:
https://wiki.freepascal.org/TAChart_doc ... ed_sources
Stichwort: Multi-Valued Sources
Hmm...... ich glaube ich hab sowas in Excel.... müsste mal schauen, wie da die Achsenzuweisungen heissen.
Läuft im Prinzip darauf hinaus, dass deine X-Achsen-Beschriftung z.B. deine Wochentage sind.
Deine sequentiellen Daten musst du dann aber in ein "2D"-Format bringen (Spalten=Wochentage, Zeilen=Die "eigentliche" Woche).
Und das wäre der "Datenbereich"
Wenn ich mich recht erinner, ist dann so eine "Zeile" in den 2D-Daten eine "SeriesCollection" oder so ähnlich
EDIT: Ich glaub ich hab was gefunden:
https://wiki.freepascal.org/TAChart_doc ... ed_sources
Stichwort: Multi-Valued Sources
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Re: TAChart untypische X-Achse - wie umgehen ?
Ich verstehe das so, dass du alle vielen Datenpunkte nach Wochentagen (oder Stunden) gruppieren möchtest. Ein Chart würde dann 7 (bzw. 24) x-Werte enthalten.
Du speicherst deine Daten nicht im Chart, sondern in einer externen Collection, und verwendest eine UserDefinedChartSource, um diese externen Daten in den Chart zu übertragen. Das ist gut so, denn du musst nun nicht die Originaldaten manipulieren, und hast alle Freiheit, die Daten neu zu arrangieren.
Das Bindeglied zwischen Chart und externer Datenquelle ist wiegesagt die UserDefinedChartSource. Hier kannst du sagen, was X und Y sind.
Die Daten nach Wochentagen zu gruppieren, geht ganz einfach. Übergib an AItem.X (der x-Wert des Datenpunktes) nicht den volle Datum/Zeitwert, sondern die Nummer des Wochentags (oder der Stunde), und schon hast du alle Messwerte für alle Sonntage (oder für die Zeit zwischen 12:00 und 12:59:59) untereinander, und dein Chart hat nur noch 7 (bzw 24) Werte auf der x-Achse:
Du musst die DateTimeIntervalChartSource als Marks.Source von der x-Achse lösen. Beim Gruppieren nach Stunden kannst du die x-Einteilung so lassen, denn die Achsen-Ticks entsprechen dann genau den Stunden. Bei der Gruppierung nach Wochentagen hättest du wahrscheinlich den Namen der Wochentage an der Achse. Das, denke ich, geht am einfachsten, indem du eine TListChartSource hinzufügst und mit Marks.Source der x-Achse verbindest. In dieser ChartSource erzeugst du 7 Werte mit der Zuordnung der Wochentagsnummer zum Wochentagsnamen (ich besetze immer x und y gleichzeitig, damit man die richtigen Daten auch bei gedrehter Achse richtig hat):
Welche Datenmanipulation gerade zu verwenden ist, wird wahrscheinlich mit einer Combobox, Buttons, Checkboxes etc. festgelegt. Immer wenn sich diese ändern schaltest du im OnGetChartData der UserDefinedChartSource die entsprechende Gruppierung frei und aktivierst du zugehörige ChartSource für die Achsenbeschriftung.
Siehe beigefügtes modifiziertes Projekt.
Wahrscheinlich wird man an der großen Streuung der Daten keine systematischen Trends a la "Besuch bei Oma am Sonntag --> hoher Zuckerwert" erkennen können. Daher würde ich noch eine Mittelwertbildung einschalten. Entweder überträgst du dafür deine Daten in eine Datenbank und verwendest "GROUP BY" Anweisungen, oder du nimmst ein Array[WochenTage] bzw. Array[Stunden], in das du alle Messwerte einsortierst und dann am Ende den Mittelwert je Wochentag/Stunde bildest und erst diese plottest. Im Demo-Projekt ist das nicht enthalten
Du speicherst deine Daten nicht im Chart, sondern in einer externen Collection, und verwendest eine UserDefinedChartSource, um diese externen Daten in den Chart zu übertragen. Das ist gut so, denn du musst nun nicht die Originaldaten manipulieren, und hast alle Freiheit, die Daten neu zu arrangieren.
Das Bindeglied zwischen Chart und externer Datenquelle ist wiegesagt die UserDefinedChartSource. Hier kannst du sagen, was X und Y sind.
Die Daten nach Wochentagen zu gruppieren, geht ganz einfach. Übergib an AItem.X (der x-Wert des Datenpunktes) nicht den volle Datum/Zeitwert, sondern die Nummer des Wochentags (oder der Stunde), und schon hast du alle Messwerte für alle Sonntage (oder für die Zeit zwischen 12:00 und 12:59:59) untereinander, und dein Chart hat nur noch 7 (bzw 24) Werte auf der x-Achse:
Code: Alles auswählen
procedure TFrameAnalyseDM.UDFCSGetChartDataItem(
ASource: TUserDefinedChartSource; AIndex: Integer; var AItem: TChartDataItem);
var
tmp: integer;
tmpDT: TDateTime;
begin
tmpDT := BL.Items[AIndex].DT;
//AItem.X := tmpDT; // Datum/Zeit der Messung beibehalten
AItem.X := DayOfWeek(tmpDT); // Messwerte nach Wochentagen gruppieren
// AItem.X := HourOf(tmpDT); // Messerte nach Stunden gruppieren
AItem.Y := BL.Items[AIndex].mgdl;
if (AItem.Y < OG) and (AItem.Y > UG) then
AItem.Color:= clGreen
else
AItem.Color:= clRed;
end;Code: Alles auswählen
with ListChartSource1 do
begin
Clear;
Add(1, 1, 'So');
Add(2, 2, 'Mo');
Add(3, 3, 'Di');
Add(4, 4, 'Mi');
Add(5, 5, 'Do');
Add(6, 6, 'Fr');
Add(7, 7, 'Sa');
end;
Chart1.BottomAxis.Marks.Source := ListChartSource1;
Chart1.BottomAxis.Marks.Style := smsLabel;;
end;Siehe beigefügtes modifiziertes Projekt.
Wahrscheinlich wird man an der großen Streuung der Daten keine systematischen Trends a la "Besuch bei Oma am Sonntag --> hoher Zuckerwert" erkennen können. Daher würde ich noch eine Mittelwertbildung einschalten. Entweder überträgst du dafür deine Daten in eine Datenbank und verwendest "GROUP BY" Anweisungen, oder du nimmst ein Array[WochenTage] bzw. Array[Stunden], in das du alle Messwerte einsortierst und dann am Ende den Mittelwert je Wochentag/Stunde bildest und erst diese plottest. Im Demo-Projekt ist das nicht enthalten
- Dateianhänge
-
analyse_demo_wp.zip- (8.74 KiB) 193-mal heruntergeladen
- af0815
- Lazarusforum e. V.
- Beiträge: 7062
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: TAChart untypische X-Achse - wie umgehen ?
Danke für das modifizierte Projekt, da habe ich jetzt etwas zum Durcharbeiten.
Mittelwerte etc. sind bei den Detailgrafiken nicht wirklich Aussagekräftig - die Daten gehen ja nicht an Manager. Erfahrunggemäss brauchen nur Manager Mittelwerte, da sie mit diesen alles mögliche kaschiert sehen wollen (20 jahre Praxis erlebt).
Mein Ziel ist es, so nahe an diese Standardgrafiken heran zu kommen.
Als Beispiel reale Daten:
Die Streung in den Daten ist klar, da ich gaussisch verteilte Zufallsdaten genommen habe. Im medizinischen Bereich tauchen die eher glockenfärmig auf, weil man ja einen Zielwert hat, den man erreichen möchte. Genaugenommen haben die Daten nach unten eine natürliche Grenze (=tödlich) und nach oben genaugenommen auch (delirium/tod), das ist einmal nicht berücksichtigt, aber die Demodaten sind in einem Bereich der so vorkommen kann.wp_xyz hat geschrieben: Mo 12. Jan 2026, 16:35 Wahrscheinlich wird man an der großen Streuung der Daten keine systematischen Trends a la "Besuch bei Oma am Sonntag --> hoher Zuckerwert" erkennen können. Daher würde ich noch eine Mittelwertbildung einschalten. Entweder überträgst du dafür deine Daten in eine Datenbank und verwendest "GROUP BY" Anweisungen, oder du nimmst ein Array[WochenTage] bzw. Array[Stunden], in das du alle Messwerte einsortierst und dann am Ende den Mittelwert je Wochentag/Stunde bildest und erst diese plottest. Im Demo-Projekt ist das nicht enthalten
Mittelwerte etc. sind bei den Detailgrafiken nicht wirklich Aussagekräftig - die Daten gehen ja nicht an Manager. Erfahrunggemäss brauchen nur Manager Mittelwerte, da sie mit diesen alles mögliche kaschiert sehen wollen (20 jahre Praxis erlebt).
Mein Ziel ist es, so nahe an diese Standardgrafiken heran zu kommen.
Als Beispiel reale Daten:
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: TAChart untypische X-Achse - wie umgehen ?
Diese Screenshots gehen noch einen Schritt weiter als mein Code: Hier ist im x-Wert die Uhrzeit beibehalten.
Für den Wochentags-Plot musst du damit im OnGetChartData-Event AItem.X := WeekDay(tmpDT) + frac(tmpDT) nehmen, und für den StundenPlot den Datumsanteil abtrennen und nur die Nachkomma-Stellen verwenden (das ist bei TDateTime ja die Uhrzeit).
Für den Wochentags-Plot musst du damit im OnGetChartData-Event AItem.X := WeekDay(tmpDT) + frac(tmpDT) nehmen, und für den StundenPlot den Datumsanteil abtrennen und nur die Nachkomma-Stellen verwenden (das ist bei TDateTime ja die Uhrzeit).
- af0815
- Lazarusforum e. V.
- Beiträge: 7062
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: TAChart untypische X-Achse - wie umgehen ?
Hab ich schon gemacht, nachdem ich es langsam verstehe.wp_xyz hat geschrieben: Mo 12. Jan 2026, 19:12 Diese Screenshots gehen noch einen Schritt weiter als mein Code: Hier ist im x-Wert die Uhrzeit beibehalten.
Für den Wochentags-Plot musst du damit im OnGetChartData-Event AItem.X := WeekDay(tmpDT) + frac(tmpDT) nehmen, und für den StundenPlot den Datumsanteil abtrennen und nur die Nachkomma-Stellen verwenden (das ist bei TDateTime ja die Uhrzeit).
Code: Alles auswählen
case cbGroupBy.ItemIndex of
1: AItem.X := DayOfWeek(tmpDT)*1.0 + frac(tmpDT);
2: begin
DecodeTime(tmpDT,H,N,S,MS);
AItem.X := H*1.0 + (N/60);
end
else
AItem.X := tmpDT;
end;
Bei der Hintergrundseinfärbung ist mir klar wie das geht, wenn ich alles einfärben will, wenn ich aber die 3 Bereiche extra einfärben will anhand der OG und UG, muss ich das rechnen oder bekomme ich die Koordinaten der Linien heraus und kann damit die Bereiche dynamisch ausfüllen ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: TAChart untypische X-Achse - wie umgehen ?
Zu den eingefärbten Bereichen: Sowas macht man mit Hilfe der Marks.Stripes der Achse, von der die Bereiche ausgehen. Man setzt ein TChartStyles auf das Formular und verbindet es mit Axis.Marks.Stripes. Ein Klick auf den '...' neben der Styles-Property öffnet den Styles-Editor. Füge drei Styles hinzu: der erste ist zwischen -unendlich und dem 1.Marker (75), der zweite zwischen dem 1. und 2. Marker (135), und der dritte für darüber. Gib jedem Style.Brush die gewünschte Farbe, schalte Pen.Style auf psClear, weil deine Vorlage keine Umrandungslinien hat. Die anderen Properties brauchst du in dieser Anwendung nicht (normalerweise verwendet man Styles für Series mit mehreren y-Werten, um jeder y-Stufe ein eigenees Aussehen zu geben).
Ordne mal spaßeshalber diese ChartStyles der LeftAxis zu: Du erhältst eine sich wiederholende Abfolge der drei Farben jeweils zwischen zwei benachbarten Achsenmarkern.
Das ist so nicht gewünscht. Als erstes musst du die Schwellwerte definieren, bei denen die Bereiche wechseln (75 und 135). Nimm dafür wieder eine ChartListSource und verbinde sie mit LeftAxis.Marks.Source. Jetzt hast du die drei Farbbereiche allein, aber die normale Achsenbeschriftung wurde durch die Werte in der ListChartSource ersetzt.
Im letzten Schritt definierst du nun eine zweite y-Achse. Standardmäßig umfasst sie genau denselben Bereich wie die erste y-Achse. Entferne die ChartStyle und die ListSource von der ersten y-Achse und ordne sie der zweiten y-Achse zu --> voila!
Wenn du die Beschriftung der beiden Schwellwerte auf der rechten Seite haben willst, mache das Alignment der 2. y-Achse zu calRight. Oder, wenn du die Zahlen nicht angezeigt haben willst, lasse die 2. y-Achsle mit dem Alignment auf calLeft, aber setze Marks.Visible auf false und, damit auch die Ticks verschwinden, setzte TickLength und TickInnerLength auf 0.
Ordne mal spaßeshalber diese ChartStyles der LeftAxis zu: Du erhältst eine sich wiederholende Abfolge der drei Farben jeweils zwischen zwei benachbarten Achsenmarkern.
Das ist so nicht gewünscht. Als erstes musst du die Schwellwerte definieren, bei denen die Bereiche wechseln (75 und 135). Nimm dafür wieder eine ChartListSource und verbinde sie mit LeftAxis.Marks.Source. Jetzt hast du die drei Farbbereiche allein, aber die normale Achsenbeschriftung wurde durch die Werte in der ListChartSource ersetzt.
Im letzten Schritt definierst du nun eine zweite y-Achse. Standardmäßig umfasst sie genau denselben Bereich wie die erste y-Achse. Entferne die ChartStyle und die ListSource von der ersten y-Achse und ordne sie der zweiten y-Achse zu --> voila!
Wenn du die Beschriftung der beiden Schwellwerte auf der rechten Seite haben willst, mache das Alignment der 2. y-Achse zu calRight. Oder, wenn du die Zahlen nicht angezeigt haben willst, lasse die 2. y-Achsle mit dem Alignment auf calLeft, aber setze Marks.Visible auf false und, damit auch die Ticks verschwinden, setzte TickLength und TickInnerLength auf 0.
- Dateianhänge
-
stripes.zip- (2.38 KiB) 177-mal heruntergeladen
Re: TAChart untypische X-Achse - wie umgehen ?
Hier nun auch noch ein Vorschlag für die Achsenbeschriftung. Nicht ganz trivial... Aber mit einer zweiten Achse und einer Minor-Achse klappt es so ungefähr. In dem Beispiel-Projekt sind die entsprechenden Änderungen im Code gemacht, so dass ich mir diesmal das "Tutorial" erspare.
- Dateianhänge
-
Achsenbeschriftung.zip- (3.76 KiB) 178-mal heruntergeladen
- af0815
- Lazarusforum e. V.
- Beiträge: 7062
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: TAChart untypische X-Achse - wie umgehen ?
Danke, da habe ich einiges zum Verdauen und Verstehen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).