Delphi-PRAXiS

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: Punkte X/Y hinzufügen (https://www.delphipraxis.net/48167-tchart-punkte-x-y-hinzufuegen.html)

Marphy 21. Jun 2005 16:21


TChart: Punkte X/Y hinzufügen
 
Liste der Anhänge anzeigen (Anzahl: 4)
Hallo zusammen,
ich habe eine TChart-Komponente, der ich zur Laufzeit mehrere TFastLineSeries hinzufüge.
Jede dieser LineSeries stellt eine Kurve da, deren Punkte mit ihren ganauen X/Y-Koordinaten vorliegen.
Was ich also genau will, ist nichts anderes, als mehrere Punkte in ein Diagramm zu zeichnen, wobei alle Punkte einer Gruppe/Kurve verbunden werden sollen.

Dies klappt auch schon ganz gut:
Delphi-Quellcode:
for i := 0 to Length(Curves) do begin
  with Curves[i] do begin
   for i2 := 0 to Length(Points) do begin
     with Points[i2] do begin
       MyFastLineSeries.AddXY(X, Y);
     end;
   end;
  end;
end;
Nun, aber es funktioniert eben noch nicht 100%ig: :?
Zitat:

Zitat von Delphi Hilfe zu AddXY-Methode
Diese Funktion fügt einen neuen Punkt in der Reihe ein. Der neue Punkt hat X- und Y-Werte. Der Parameter AXLabel ist optional (kann leer bleiben ''''). Der Parameter AColor ist optional (kann clTeeColor entsprechen). Die Funktion ermittelt die Position des neuen Punktes in der Werteliste.

Und genau das darf nicht geschehen! Wenn nämlich nun die Kurve z.B. eine Art C darstellt, d.h. Teile der Kurve übereinander liegen, werden die Werte von AddXY automatisch nach dem X-Wert sortiert, was dann zum im Anhang [4] dargestellten Ergebnis führt.

Mein Problem also:
Wie kann ich eine Kurve im TChart zeichnen, ohne dass die einzelnen Kurvenpunkte umsortiert werden?

Im Anhang kann man sich die ganze Problematik noch mal in Ruhe betrachten (der Einfachheit halber nur mit einer Kurve) :wink:

Danke schon im Voraus für eure Antworten! :thumb:

Grüße, Marco

Unwissender 21. Jun 2005 17:24

Re: TChart: Punkte X/Y hinzufügen
 
Hi,

das Zauberwort ist hier wohl Funktion. TChart geht einfach davon aus, dass es sich bei deinen Werten um eine Funktion handelt. Und nach math. Definition ist jede Funktion f(x) eindeutig, dass heißt für jedes x gibt es genau ein y. Was TChart dir also anzeigt, ist der Graph einer Funktion und der ist immer "sortiert".
Du kannst nur gucken, ob es eine Series-Art gibt, die keine Funktion realisiert, die du für deine Zwecke verwenden kannst, aber denke nicht, dass TChart dass dafür geeignete Tool ist.

Viel Glück,

Gruß Unwissender

Marphy 21. Jun 2005 18:37

Re: TChart: Punkte X/Y hinzufügen
 
Hallo Dochwisser, :wink:
danke für deine Antwort, wenn sie auch nicht gerade sehr erbauend war. :pale: :mrgreen:
Zitat:

Zitat von Unwissender
das Zauberwort ist hier wohl Funktion. TChart geht einfach davon aus, dass es sich bei deinen Werten um eine Funktion handelt. Und nach math. Definition ist jede Funktion f(x) eindeutig, dass heißt für jedes x gibt es genau ein y. Was TChart dir also anzeigt, ist der Graph einer Funktion und der ist immer "sortiert".

Hmm, du magst vielleicht schon Recht haben... Aber irgendwie muss es doch noch einen Weg geben, die Punkte unsortiert hinzuzufügen!

Zitat:

Zitat von Unwissender
Du kannst nur gucken, ob es eine Series-Art gibt, die keine Funktion realisiert, die du für deine Zwecke verwenden kannst, aber denke nicht, dass TChart dass dafür geeignete Tool ist.

Alle Series stellen eine Funktion da, falls du Recht hast. Man könnte meinen, TPointSeries ist davon ausgenommen, dem ist aber nicht so: Auch hier werden die Punkte sortiert, die Punktreihenfolge ist aus der Darstellung jedoch nicht ersichtlich. Diese Series ist für meinen Zweck aber leider nicht brauchbar.
Ich hoffe, ihr wisst hier weiter... :wall:

Gruß, Marco

Khabarakh 21. Jun 2005 18:47

Re: TChart: Punkte X/Y hinzufügen
 
Spricht etwas gegen ein simples Delphi-Referenz durchsuchenTCanvas.PolyLine?

Marphy 21. Jun 2005 18:51

Re: TChart: Punkte X/Y hinzufügen
 
Zitat:

Zitat von Khabarakh
Spricht etwas gegen ein simples Delphi-Referenz durchsuchenTCanvas.PolyLine?

Ja, viel zu aufwending (z.B. Zeichnen der Skala). :shock:

Khabarakh 21. Jun 2005 19:33

Re: TChart: Punkte X/Y hinzufügen
 
Ich kenne mich mit TChart aus, aber es sollte doch möglich sein, immer nach dem Zeichnen der Skala einen Code auszuführen (OnBeforeDrawSeries?).
Oder du wartest noch etwas (1 - 2 Wochen), dann habe ich wahrscheinlich die perfekte Komponente für dich :wink: .

Hansa 21. Jun 2005 19:37

Re: TChart: Punkte X/Y hinzufügen
 
Das da kann so nichts werden. 8) Wie bereits gesagt, ist das ganze eine mathem. Funktion. Und diese ist nun mal so definiert, daß sie zu jedem x nur ein f(x) hat. Stelle Dir ein unteres Ende des C vor bei f(x)= 1 und das obere bei f(x) = 3. Beide aber für x = 1. Also ist es keine Funktion mehr (weil nicht eindeutig), sondern bloß eine Relation !

Selbst das PieChart ist eine Funktion, die allerdings die Werte im Kreis aufreiht. Zwei Kuchenteile haben da auch nicht den gleichen x-Wert !!

Du mußt dir was anderes überlegen. :mrgreen:

wg. "roter Kasten" :lol: : das wird nichts werden ! Der Canvas ist gefragt und sonst nichts !

Marphy 22. Jun 2005 14:38

Re: TChart: Punkte X/Y hinzufügen
 
Hallo!
Zitat:

Zitat von Sebastian
Ich kenne mich mit TChart aus, aber es sollte doch möglich sein, immer nach dem Zeichnen der Skala einen Code auszuführen (OnBeforeDrawSeries?).

Und was würde dieser Code dann tun?

Zitat:

Zitat von Sebastian
Oder du wartest noch etwas (1 - 2 Wochen), dann habe ich wahrscheinlich die perfekte Komponente für dich.

Soll heißen? :stupid:

Zitat:

Zitat von Hansa
Das da kann so nichts werden. Wie bereits gesagt, ist das ganze eine mathem. Funktion. Und diese ist nun mal so definiert, daß sie zu jedem x nur ein f(x) hat. Stelle Dir ein unteres Ende des C vor bei f(x)= 1 und das obere bei f(x) = 3. Beide aber für x = 1. Also ist es keine Funktion mehr (weil nicht eindeutig), sondern bloß eine Relation !

Selbst das PieChart ist eine Funktion, die allerdings die Werte im Kreis aufreiht. Zwei Kuchenteile haben da auch nicht den gleichen x-Wert !!

Ist ja alles logisch, habe das schon verstanden :wink: Aber programmiertechnisch wäre es für Steema doch kein Problem gewesen, eine Art "AddXYNoSort" o.ä. zu implementieren, warum sollten sie ihre Komponente dann derart einschränken?

Zitat:

Zitat von Hansa
Du mußt dir was anderes überlegen.

Habe ich schon, ist aber nicht so das Non-Plus-Ultra... :(

Zitat:

Zitat von Hansa
wg. "roter Kasten": das wird nichts werden !

Was heißt dat denn nun schon wieder? :shock:

Zitat:

Zitat von Hansa
Der Canvas ist gefragt und sonst nichts !

Alle Punkte, Linien, Achsen, Skalen selbst zeichnen? Auto-Min/-Max, Skalierung, Scolling, Zoom selbst implementieren?! :shock: :pale: :gruebel: Nein danke! :???: :wink:

Noch Ideen? :mrgreen:

Gruß, Marco

BrunoT 22. Jun 2005 14:53

Re: TChart: Punkte X/Y hinzufügen
 
Hi Marco,

könnte man nicht so tun, als würde die Kurve aus zwei Serien bestehen?
dazu Maximum suchen und die Kurve in zwei Serien aufteilen.

mfg

BrunoT

Khabarakh 22. Jun 2005 15:06

Re: TChart: Punkte X/Y hinzufügen
 
Zitat:

Zitat von Marphy
Hallo!
Zitat:

Zitat von Sebastian
Ich kenne mich mit TChart aus, aber es sollte doch möglich sein, immer nach dem Zeichnen der Skala einen Code auszuführen (OnBeforeDrawSeries?).

Und was würde dieser Code dann tun?

Wenn du dort deinen PolyLine-Code unterbringst, müsste doch die Skala schon gezeichnet sein. Also schonmal weniger zu zeichnen.
Zitat:

Zitat:

Zitat von Sebastian
Oder du wartest noch etwas (1 - 2 Wochen), dann habe ich wahrscheinlich die perfekte Komponente für dich.

Soll heißen? :stupid:
Lass dich überraschen :stupid: . Naja, eben eine Komponente mit Zoom, Verschieben, Grid und einfachem relativen Zeichnen auf dieser.

Zitat:

Zitat:

Zitat von Hansa
wg. "roter Kasten": das wird nichts werden !

Was heißt dat denn nun schon wieder? :shock:
Das habe ich mich auch schon gefragt :stupid: .

Marphy 22. Jun 2005 15:07

Re: TChart: Punkte X/Y hinzufügen
 
Hi Holger, [EDIT]Warum eigentlich BrunoT? :stupid:[/EDIT]

Zitat:

Zitat von BrunoT
könnte man nicht so tun, als würde die Kurve aus zwei Serien bestehen?
dazu Maximum suchen und die Kurve in zwei Serien aufteilen.

:arrow: :arrow: :arrow: :arrow:
Zitat:

Zitat von Marphy
Zitat:

Zitat von Hansa
Du mußt dir was anderes überlegen.

Habe ich schon, ist aber nicht so das Non-Plus-Ultra...

Das war es, was ich mir schon überlegt habe. Aber wie gesagt, nicht übermäßig elegant... :|

Gruß Marco

BrunoT 22. Jun 2005 15:14

Re: TChart: Punkte X/Y hinzufügen
 
Hi Marco,

Das Leben ist ein einziger positiv zusehender Kompromiss :wink:

mfg

BrunoT

[Edit]BrunoT - Spitznahme, warum - weiss ich auch nicht, zu lange her[Edit]

Marphy 22. Jun 2005 15:16

Re: TChart: Punkte X/Y hinzufügen
 
Hallo Sebastian,

Zitat:

Zitat von Khabarakh
Wenn du dort deinen PolyLine-Code unterbringst, müsste doch die Skala schon gezeichnet sein. Also schonmal weniger zu zeichnen.

Ach das meinst du... :wink: Und die Skalierung?!

Zitat:

Zitat von Sebastian
Lass dich überraschen :stupid: . Naja, eben eine Komponente mit Zoom, Verschieben, Grid und einfachem relativen Zeichnen auf dieser.

Aber hoffentlich nicht extra für mich? :stupid: :wink: Wenn du noch Beta-Tester suchst: Schreib mir einfach per PN, dann rück ich auch meine Mail-Adresse raus. :wink:

Zitat:

Zitat von Sebastian
Zitat:

Zitat von Marphy
Was heißt dat denn nun schon wieder? :shock:

Das habe ich mich auch schon gefragt :stupid: .

Dachte schon, ich wäre da der Einzige... *puh* :mrgreen:

Gruß, Marco

Marphy 22. Jun 2005 15:18

Re: TChart: Punkte X/Y hinzufügen
 
Hi Holger,
komm mit dem Posten ja gar nicht mehr hinterher :wink:

Zitat:

Zitat von BrunoT
Das Leben ist ein einziger positiv zusehender Kompromiss :wink:

Du hättest wohl genauso gut auch Philosoph werden können :mrgreen:

Gruß, Marco

Khabarakh 22. Jun 2005 15:44

Re: TChart: Punkte X/Y hinzufügen
 
Zitat:

Zitat von Marphy
Zitat:

Zitat von Khabarakh
Wenn du dort deinen PolyLine-Code unterbringst, müsste doch die Skala schon gezeichnet sein. Also schonmal weniger zu zeichnen.

Ach das meinst du... :wink: Und die Skalierung?!

Keine Ahnung :mrgreen: . Ich könnte mir vorstellen, dass TChart irgendeine Methode zum Umrechnen von relativen zu absoluten Koordinaten hat. Bin leider kein TChart-Experte :wink: .

Zitat:

Zitat von Marco
Zitat:

Zitat von Sebastian
Lass dich überraschen :stupid: . Naja, eben eine Komponente mit Zoom, Verschieben, Grid und einfachem relativen Zeichnen auf dieser.

Aber hoffentlich nicht extra für mich? :stupid: :wink: Wenn du noch Beta-Tester suchst: Schreib mir einfach per PN, dann rück ich auch meine Mail-Adresse raus. :wink:

Ich habe schon am Wochenende aus eigenem Antrieb angefangen, keine Angst :wink: . Und so groß, dass ich extra Beta-Tester benötige, wird das Projekt IMO nicht. Zwei Wochen war vlt. auch etwas hochgegriffen, auch wenn ich in der Hälfte der nächsten Woche nicht da bin.

Marphy 22. Jun 2005 16:00

Re: TChart: Punkte X/Y hinzufügen
 
Hallo Sebastian,

Zitat:

Zitat von Khabarakh
Bin leider kein TChart-Experte :wink: .

Aha, plötzlich:
Zitat:

Zitat von Sebastian ein paar Posts vorher
Ich kenne mich mit TChart aus

:mrgreen: :wink:

Zitat:

Zitat von Khabarakh
Ich habe schon am Wochenende aus eigenem Antrieb angefangen, keine Angst :wink: .

Dann bin ich ja beruhigt... :-D

Zitat:

Zitat von Khabarakh
Und so groß, dass ich extra Beta-Tester benötige, wird das Projekt IMO nicht.

Schicken kannst's mir ja trotzdem :mrgreen:

Zitat:

Zitat von Khabarakh
Zwei Wochen war vlt. auch etwas hochgegriffen, auch wenn ich in der Hälfte der nächsten Woche nicht da bin.

Na, wirst schon sehen, so einfach wird dat nich... :???:

Gruß, Marco

Khabarakh 22. Jun 2005 16:25

Re: TChart: Punkte X/Y hinzufügen
 
Zitat:

Zitat von Marphy
Hallo Sebastian,

Zitat:

Zitat von Khabarakh
Bin leider kein TChart-Experte :wink: .

Aha, plötzlich:
Zitat:

Zitat von Sebastian ein paar Posts vorher
Ich kenne mich mit TChart aus

:mrgreen: :wink:

öhm
...
:lol:
Da sollte noch ein "nicht" stehen :oops: .
So hört sich der Satz aber auch etwas komisch an :wink: .

spiero 5. Apr 2011 13:23

AW: TChart: Punkte X/Y hinzufügen
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo zusammen,

auch wenn der letzte Beitrag zu diesem Thema schon älter ist, wollte ich hier doch eine mögliche Lösung mitteilen, die ich gerade gefunden habe:

Einfach die Eigenschaft "Series1.XValues.Order" von "loAscending" auf "loNone" setzen:

Code:
Series1.XValues.Order:=loNone;
oder noch einfacher im Objektinspektor diese Eigenschaft ändern.

Dann zeichnet TChart einen normale Kurve, bei der auch zwei y-Werte zu einem x-Wert möglich sind.

Die Anhänge zeigen den Effekt durch Zeichnen eines Kreises in TChart vorher mit "loAscending" und nachher mit "loNone".


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:02 Uhr.

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