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

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.

      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?

0

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

musisz zrobić tak

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

a losowy kolor możesz zrobić tak

                     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;

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.

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.

0

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

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;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1