"Löcher" in TChart Stacked Series



  • Hallo zusammen,

    ich habe ein TChart mit einigen BarSeries im Stacked Modus, um ein Balkendiagramm anzuzeigen. Einige Datenpunkte existieren einfach nicht, und daher wird für diesen Datenpunkt kein Wert eingetragen. Das führt dazu, dass das Balkendiagramm "Löcher" hat. Weiß jemand, wie man dieses Verhalten ändern kann, sodass jeder Balken nahtlos auf den vorhergehenden aufsetzt?

    Screenshot



  • Hallo,

    ich weiß nicht so genau wie Du die Anzeige gerne hättest aber die Stack100% Serie ist "löcherfrei". Da wirst Du aber sicher Deine Werte der Balken zueinander umrechnen müssen.

    Gruß myerscola



  • das Bild kann ich leider nicht sehen.

    versuch mal bei Null-Werten AddNull bzw. AddNullXY zu verwenden



  • Danke für die Antworten, aber...

    @myerscola:
    Damit habe ich allerdings eine prozentuale Skalierung, die ich nicht haben möchte.

    @Linnea:
    Das eigentliche Problem ist, dass ich im Vorfeld nicht weiß, wie viele Series benötigt werden. Die Daten kommen aus einer DB und für jeden Datensatz existiert so etwas wie ein Typ. Das Balkendiagramm soll Daten nach diesen Typen erstellen, es kann also sein, dass z.B. der 20. Datensatz einen Typ enthält, der vorher noch nicht aufgetaucht ist. In diesem Fall muss ich eine neue Series erzeugen und für die Positionen [0.18] eine 0 einfügen. Das ist zwar kein Riesenaufwand, aber doch irgendwie umständlich. Ausserdem muss ich an allen folgenden Positionen eine 0 einfügen, wenn für diese Position kein Messwert existiert, und da fängt die Sache an unangenehm zu werden.

    PS:
    Musste zwei Imagehoster ausprobieren und hab´ dabei die Links vermasselt. Sollte jetzt aber gehen.



  • ich verwende TChart Version Pro 8.07

    wenn du für die fehlenden Daten nichts einträgst kann es zu einem Fehlverhalten im TChart kommen. mal als Beispiel:

    Series1->AddXY(1,10);
    Series1->AddXY(2,10);
    Series1->AddXY(3,10);
    Series1->AddXY(4,10);
    Series1->AddXY(5,10);
    
    Series2->AddXY(1,10);
    Series2->AddXY(2,10);
    //Series2->AddXY(3,10);   <-- nur auskommentieren !
    Series2->AddXY(4,10);
    Series2->AddXY(5,10);
    
    Series3->AddXY(1,10);
    Series3->AddXY(2,10);
    Series3->AddXY(3,10);
    Series3->AddXY(4,10);
    Series3->AddXY(5,10);
    

    dieses Beipiel zeigt ein interessantes Verhalten: in Balken 3 ist eine Lücke zu sehen und bei Balken 5 fehlt der Wert für Series2 ganz.
    ich hab noch nicht bei Steema geschaut ob es einen Bugreport/fix gibt, da ich das zu selten brauch, aber wahrscheinlich ist es schon sinnvoll das auch im Programm durch die Nutzung von NULL-Werten zu umgehen.



  • Ja, ich weiß 😉

    Das ist genau das Verhalten, was ich meine, und da die Anzahl der Series im Vorfeld nicht bekannt ist wird die ganze Sache etwas unhandlich. Im Moment löse ich das Problem in drei Stufen:

    1. Anzahl aller benötigten Series bestimmen
    2. pauschal für alle Messpunkte Null in die Series einsetzen
    3. tatsächliche Messdaten in die Series einsetzen

    Wenn es irgendwo in den TCharts eine Einstellung gäbe, mit der fehlende Datenpunkte für BarCharts als 0 behandelt werden könnte ich einiges an Code rauswerfen.



  • vielleicht solltest du dann mal im Forum bei Steema schaun oder fragen ob es eine Lösung dafür gibt 🙂

    dort steht für einen ähnlichen Fall, daß alle Series die gleiche Anzahl von Punkten haben müssen und ein Beispiel, wo auch die AddNullXY-Variante für beliebige Leerstellen verwendet wurde.

    falls du ein TChart Pro mit Sourcecode hast, kannst du ja die gewünschte Funktion mit einbauen 😉



  • Brauchst du die x-Koordinate überhaupt?
    Du kannst ja die Daten auch mit Add zufügen. Die x_Achsen-Beschriftung kannst du ja mit OnGetAxislabel anpassen.



  • Ja, die X-Achse brauche ich, weil sie den Zeitpunkt bestimmt. OnGetAxisLabel benutze ich bereits, inwiefern mir das aber bei der Vermeidung der Löcher helfen soll verstehe ich nicht.



  • Wenn du deine Daten nur mit Add zufügst hast du ja keine richtige Zuordnung der y-Werte zu den x-Positionen mehr. Das könnte man in OnGetrAxisLabel umlabeln, so dass die Zuordnung wieder stimmt. Du mußt dir halt nur merken wo die Lücken sind.



  • DocShoe schrieb:

    Im Moment löse ich das Problem in drei Stufen:

    1. Anzahl aller benötigten Series bestimmen
    2. pauschal für alle Messpunkte Null in die Series einsetzen
    3. tatsächliche Messdaten in die Series einsetzen

    Stufe 2 könntest du etwas vereinfachen, indem du dir zwei dynamische Felder mit den x/Null-Werten machst und die jeweils immer den XValues/YValues der Series zuweist, da ja die Anzahl der benötigten Werte immer für alle Series gleich ist -> AddArray.

    oder du füllst erst das dynamische Feld mit den Null, dann mit den Realdaten und weißt es danach der betroffenen Series zu -> AddArray. Diese Variante bietet sich an wenn du die Daten so oder so intern weiter verwendest.

    eine andere Möglichkeit wäre vielleicht die Nutzung von DBChart und der Verknüpfung des Datasource, aber dann muß natürlich die SQL-Abfrage so gestaltet sein, dass immer die gleiche Anzahl an Werten rauskommt.



  • Nochmals danke für die Antworten,

    ich denke, dass das Verhalten entweder ein Bug ist oder so gewünscht wird, jedenfalls lässt sich das nicht ändern. Ich hab´s bei Steema in´s Forum geschrieben, mal sehen, vielleicht gibt´s ja ´ne Antwort dazu.
    Ansonsten nehm´ ich das jetzt so hin, funktioniert ja auch.


Log in to reply