Различные цвета для каждого значения в ColumnSeries - PullRequest
0 голосов
/ 15 января 2019

Я использую LiveCharts в WPF для создания декартовой диаграммы со столбцами. Значения поступают из списка, который, в свою очередь, заполняется значениями из базы данных.

Все работает отлично, за исключением того, что я хотел бы, чтобы каждый столбец имел различную заливку. Не имеет значения, какой цвет, просто случайный цвет для каждого отдельного столбца. Кроме того, я не хочу создавать новую серию для каждого значения, потому что есть слишком много значений.

Метод Mappers из аналогичного вопроса не работает для меня, так как пример меняет цвет в зависимости от того, насколько высоко значение. Я хочу разные цвета для каждой отдельной метки оси.

Это часть моего кода, где я создаю серию:

cartesianChart.Series.Add(new ColumnSeries
{
    Title = "Column Chart: ",
    Fill = Brushes.CadetBlue,
    Values = valuesList.AsChartValues(),
    DataLabels = true,
    LabelPoint = point => (point.Y).ToString(),
});

Вот как выглядит график:

Chart

Любые идеи будут оценены.

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Если вы используете SeriesCollection в LiveCharts, она автоматически назначает разные цвета для каждой отдельной серии в коллекции.

Для этого примера я взял фрагмент из одного из моих проектов, который добавляет несколько серий и имеет отдельный список, содержащий все имена серий. Это зациклит и добавит каждую серию в коллекцию и добавит данные серии и название серии из списка.

Пример графика в реальном времени:

SeriesCollection = new LiveCharts.SeriesCollection();

List<GearedValues<long>> seriesList = new List<GearedValues<long>>();

seriesList.Add(Data1.AsGearedValues().WithQuality(Quality.Low));
seriesList.Add(Data2.AsGearedValues().WithQuality(Quality.Low));

for(int i = 0; i < seriesName.Count(); ++i)
{
    SeriesCollection.Add(new GColumnSeries
    {
        Values = seriesList[i],
        Name = seriesName[i],
        Fill = System.Windows.Media.Brushes.Transparent,
        StrokeThickness = 1,
        PointGeometry = null,
        LineSmoothness = 0,
    });
}

Пример стандартных живых графиков

SeriesCollection = new LiveCharts.SeriesCollection();

List<ChartValues<long>> seriesList = new List<ChartValues<long>>();

seriesList.Add(Data1);
seriesList.Add(Data2);

for(int i = 0; i < seriesName.Count(); ++i)
{
    SeriesCollection.Add(new ColumnSeries
    {
        Values = seriesList[i],
        Name = seriesName[i],
        Fill = System.Windows.Media.Brushes.Transparent,
        StrokeThickness = 1,
        PointGeometry = null,
        LineSmoothness = 0,
    });
}

Цвета SeriesCollection предустановлены для каждой серии в коллекции, однако эти цвета по умолчанию можно изменить.

0 голосов
/ 15 января 2019

попробуйте класс DataPoint:

DataPoint p=new DataPoint(chart1.Series["Celler"]);
p.SetValueY(cellVoltage[cell]);
p.Label=cellname[cell];//string
p.Color=Color.FromArgb(255 - cell * 20, 255, 80cell*20);
chart1.Series["Celler"].Points.Add(p);

...