C++ TChart - Beschriftung bei Automatischer Skalierung mit mehreren Kurven fehlerhaft



  • Hallo Community,

    Ich habe folgendes Problem.
    Ich habe in meinem Programm eine TChartKomponente, die ich
    mit mehreren Kurven fülle.

    MyChart->BottomAxis->Automatic = true;
    

    In meinem Beispiel werden 3 TBarSeries einem TCustomChart hinzugefügt.
    die erste BarSerie , nennen wir sie BAR1, hat 5 Werte.
    die zweite und dritte BarSerie haben jeder 2 Werte.

    Als Beispiel.
    Ich füge erst BAR1 hinzu mit

    MySeriesBar = new TBarSeries(MyChart);
     	  MySeriesBar->ShowInLegend = false;
    	  MySeriesBar->XValues->DateTime = true;
    	  MySeriesBar->Clear();
              MySeriesBar->AddXY(15.01.2011, 3, "JAN", clTeeColor );
              MySeriesBar->AddXY(15.02.2011, 1, "FEB", clTeeColor );
              MySeriesBar->AddXY(15.03.2011, 6, "MAR", clTeeColor );
              MySeriesBar->AddXY(15.04.2011, 8, "APR", clTeeColor );
              MySeriesBar->AddXY(15.05.2011, 10, "MAI", clTeeColor );
    ...
    

    dann erhalte ich auch bei den Labels /Skalierung der X-Achse
    die Daten : JAN , FEB , MAR , APR , MAI und darüber den entsprechenden BAlken.

    Füge ich BAR2 und BAR3 hinzu mit gleichem Schema nur das ich hier eben nur 2 Werte habe mit "MAR" und "APR"
    werden diese Balken halt bei der entsprechenden Markierung /Datum angezeigt.

    So ist es richtig so sollte es Laufen!

    Mein Problem:

    Wenn ich zu erst BAR2 oder BAR3 hinzufüge und im Anschluss daran erst BAR1
    dann erhalte ich die Beschriftung /Skalierung der X-Achse nur für
    MAR, APR, MAI.
    Die ersten beiden Werte von BAR1 werden nicht Beschriftet , aber korrekt angezeigt.

    Ich habe das ganze ausgedehnt. Das heißt ich habe von 15.08.2010 begonnen BAR1 hinzuzufügen. Und die ersten beiden Balken werden nie Beschriftet.

    An was kann das liegen?!
    Andersherum funktioniert die Beschriftung/Skalierung perfekt.



  • Keiner ne Idee?
    Ich versteh nicht warum er mir die Balken für Jan und Feb anzeigt,
    aber keinerlei Beschriftung ect..
    Und das nur weil ich die BarSeries mit 5 Werten erst nach der BarSeries mit 2 werten mit

    MyChart->AddSeries(BarSeries1);
    

    hinzufüge.

    Wo is denn da das "Automatic = true" wenn ich vorher schauen muss welche Kurve die meisten Werte hat und diese dann zuerst dem Chart hinzufügen muss?!



  • Vielleicht solltest du mal nen Screenshot posten, so richtig kann ich mir dein Problem nicht vorstellen.



  • http://www.funpic.de/foto/499966

    Zuerst habe ich die grüne Serie dem Chart mit AddSeries hinzugefügt
    und anschließend die Rote Serie mit AddSeries hinzugefügt.
    Wie man sehen kann beginnt die Rote Serie früher als die Grüne, (November 2010)
    Jedoch werden die ersten beiden Balken nicht beschriftet.

    Führe ich die Prozedur anders druch -> Erst Rot dann Grün wäre die Beschriftung da.

    Chart1->BottomAxis->Automatic = true;
    //---------------------------------------------------------------------------
    void __fastcall TForm7::Button1Click(TObject *Sender)
    {
    
      TBarSeries* Bar1 = new TBarSeries(this);
      Bar1->XValues->DateTime = true;
    
      TDateTime dtWork = StrToDateTime("01.01.2011");
      Bar1->AddXY(dtWork,132.23,"JAN",clGreen);
      dtWork = StrToDateTime("01.02.2011");
      Bar1->AddXY(dtWork,100.23,"FEB",clGreen);
      dtWork = StrToDateTime("01.03.2011");
      Bar1->AddXY(dtWork,232.23,"MAR",clGreen);
      dtWork = StrToDateTime("01.04.2011");
      Bar1->AddXY(dtWork,332.23,"APR",clGreen);
    
      Chart1->AddSeries(Bar1);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm7::Button2Click(TObject *Sender)
    {
      TBarSeries* Bar1 = new TBarSeries(this);
      Bar1->XValues->DateTime = true;
    
      TDateTime dtWork = StrToDateTime("01.11.2010");
      Bar1->AddXY(dtWork,32.23,"NOV",clRed);
      dtWork = StrToDateTime("01.12.2010");
      Bar1->AddXY(dtWork,10.23,"DEZ",clRed);
      dtWork = StrToDateTime("01.01.2011");
      Bar1->AddXY(dtWork,239.23,"JAN",clRed);
      dtWork = StrToDateTime("01.02.2011");
      Bar1->AddXY(dtWork,332.23,"FEB",clRed);
      dtWork = StrToDateTime("01.03.2011");
      Bar1->AddXY(dtWork,32.23,"MAR",clRed);
      dtWork = StrToDateTime("01.04.2011");
      Bar1->AddXY(dtWork,33.23,"APR",clRed);
    
      Chart1->AddSeries(Bar1);
    }
    //---------------------------------------------------------------------------
    


  • das ist laut Steema das Standardverhalten steema forum
    als Workaround wird empfohlen die Labels selbst zu machen

    MyChart->BottomAxis->Items->Add(TDateTime("15.01.2011"),"JAN");
    MyChart->BottomAxis->Items->Add(TDateTime("15.02.2011"),"FEB");
    MyChart->BottomAxis->Items->Add(TDateTime("15.03.2011"),"MAR");
    MyChart->BottomAxis->Items->Add(TDateTime("15.04.2011"),"APR");
    MyChart->BottomAxis->Items->Add(TDateTime("15.05.2011"),"MAI");
    


  • ahso.
    na dann weiß ich jetzt was ich tun muss.
    Vielen Dank


Anmelden zum Antworten