Grupowanie danych w barchart używając losowych kolorów

Grupowanie danych w barchart używając losowych kolorów
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam

Chciałbym pogrupowac dane w bar charcie używajac losowych kolorów.
Z tego co widze podczas tworzenia serii, seria jest dodana do chartu z losowym kolorem.

Kopiuj
      private void drawchart()
        {
            chart1.Series.Clear();
            chart1.ApplyPaletteColors();
            chart1.Series.Add(new Series("a"));
            chart1.Series.Add(new Series("b"));
            chart1.Series.Add(new Series("c"));

            //get colors of series
            foreach (Series s in chart1.Series)
            {
                Console.WriteLine(s.Name);
                Console.WriteLine(s.Color);
                Console.WriteLine(s.BorderColor);
            }

        }

Używajac powyzszego kodu jestem w stanie wypisac nazwe serii ale dlaczego kolor = Color [Empty] dla każdej serii?

Czy jest może jakas inna możliwosc pozyskania losowego koloru używajac Legend field?

Kubuś Puchatek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 235
0

bo nie przypisałeś żadnego koloru to co ma Ci pokazać

musisz zrobić tak

Kopiuj
 chart1.Series[nrIndexu].Color = Color.Jakiś;

a losowy kolor możesz zrobić tak

Kopiuj
                     Random rd = new Random();
                   var RedColor = rd.Next(0, 255);
                    var BlueColor = rd.Next(0, 255);
                    var GreenColor = rd.Next(0, 255);

                    var NewRandomColor = Color.FromArgb(RedColor, GreenColor, BlueColor);

chart.Series[0].Color = NewRandomColor;

  • Rejestracja: dni
  • Ostatnio: dni
0

Dzieki za odpowiedz.

Racja koloru żadnego nie przypisałem do żadnej serii ale jeśli uruchomie aplikacje to kolory serii nadal bedą widoczne na charcie. Dlatego troche mnie to dziwi ze jestem w stanie wypisac nazwe serii a koloru juz nie, chociaz jest on widoczny w designview jak i podczas uruchomienia aplikacji.
Z tego co wyszukalem w internecie powinnem uzyc chart1.ApplyPaletteColors() ale jakoś nie działa.

Wiem ze w ten sposób moge tworzyc random color ale chodzi mi o to zeby kolory sie nie powtarzały, zeby kazdy kolor byl unikatowy.
Tworząc serie widze ze kolory sa tworzone zaczynajac od niebiezkiego, żóltego, czerwonego, itd.

Udalo mi sie uzystac kolory serii uzywajac Chart.CustomizeLegend Event.

  • Rejestracja: dni
  • Ostatnio: dni
0

Teraz mając liste kolorow moge nadpisywac kolory Datapoints w serii i grupowac kolumny w serii uzywajac danego koloru. Jest tylko jeden drobny problem ze chart wyswietla sie prawidlowo jak powieksze okno aplikacji czy maximalizuje okno czy jak klikne na scrollbar w charcie.

this.Refresh() - pomaga ale nie calkowicie
chart1.Refresh() i chart1.Invalidate() - nie pomaga.

Kubuś Puchatek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 235
0

Jak chcesz żeby się kolory nie powtarzały zawsze możesz wrzucić to do pętli

Kopiuj
for(int i=0; i < chart1.Series.Count; i++){
 var RedColor = rd.Next(0, 255);
                    var BlueColor = rd.Next(0, 255);
                    var GreenColor = rd.Next(0, 255);
 
                    var NewRandomColor = Color.FromArgb(RedColor, GreenColor, BlueColor);
 
chart.Series[i].Color = NewRandomColor;
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.