Вычислить общую сумму игрек линейного графика

Рейтинг: 1Ответов: 1Опубликовано: 30.05.2023

График построен на Syncfusion,

сам график

<SfChart Title="Olympic Medals">
    <ChartPrimaryXAxis ValueType="Syncfusion.Blazor.Charts.ValueType.Category"></ChartPrimaryXAxis>

    <ChartSeriesCollection>
        <ChartSeries DataSource="@MedalDetails" XName="X" YName="Y" Type="ChartSeriesType.Line">
        </ChartSeries>
    </ChartSeriesCollection>
</SfChart>

данные

public List<ChartData> MedalDetails = new List<ChartData>
{
    new ChartData { X= "02/05/2023", Y= 1 },
    new ChartData { X= "02/05/2023", Y= 2 },
    new ChartData { X= "02/05/2023", Y= 3 },
    new ChartData { X= "02/05/2023", Y= 5 },
    new ChartData { X= "02/05/2023", Y= 8 },
    new ChartData { X= "02/05/2023", Y= 7 },
    new ChartData { X= "02/05/2023", Y= 6 },
    new ChartData { X= "02/05/2023", Y= 11 },
    new ChartData { X= "02/05/2023", Y= 7 },
    new ChartData { X= "02/05/2023", Y= 12 },
    new ChartData { X= "02/05/2023", Y= 2 },
    new ChartData { X= "02/05/2023", Y= 14 },
    new ChartData { X= "02/05/2023", Y= 6 },
    new ChartData { X= "02/05/2023", Y= 12 },
    new ChartData { X= "02/05/2023", Y= 4 },
    new ChartData { X= "02/05/2023", Y= 20 },
    new ChartData { X= "02/05/2023", Y= 10 },
    new ChartData { X= "02/05/2023", Y= 22 },
    new ChartData { X= "02/05/2023", Y= 4 },
    new ChartData { X= "02/05/2023", Y= 1 },
    new ChartData { X= "02/05/2023", Y= 1 },
    new ChartData { X= "02/05/2023", Y= 3 },
    new ChartData { X= "03/05/2023", Y= 1 },
    new ChartData { X= "03/05/2023", Y= 3 },
    new ChartData { X= "03/05/2023", Y= 4 },
    new ChartData { X= "03/05/2023", Y= 9 },
    new ChartData { X= "03/05/2023", Y= 15 },
    new ChartData { X= "03/05/2023", Y= 5 },
    new ChartData { X= "03/05/2023", Y= 23 },
    new ChartData { X= "03/05/2023", Y= 10 },
    new ChartData { X= "03/05/2023", Y= 12 },
    new ChartData { X= "03/05/2023", Y= 1 },
    new ChartData { X= "03/05/2023", Y= 1 },
    new ChartData { X= "03/05/2023", Y= 8 },
    new ChartData { X= "03/05/2023", Y= 7 },
    new ChartData { X= "03/05/2023", Y= 7 },
    new ChartData { X= "03/05/2023", Y= 11 },
    new ChartData { X= "03/05/2023", Y= 9 },
    new ChartData { X= "04/05/2023", Y= 2 },
    new ChartData { X= "04/05/2023", Y= 3 },
    new ChartData { X= "04/05/2023", Y= 4 },
    new ChartData { X= "04/05/2023", Y= 11 },
    new ChartData { X= "04/05/2023", Y= 11 },
    new ChartData { X= "04/05/2023", Y= 13 },
    new ChartData { X= "04/05/2023", Y= 8 },
    new ChartData { X= "04/05/2023", Y= 16 },
    new ChartData { X= "04/05/2023", Y= 5 },
    new ChartData { X= "04/05/2023", Y= 7 },
    new ChartData { X= "04/05/2023", Y= 9 },
    new ChartData { X= "04/05/2023", Y= 11 },
    new ChartData { X= "04/05/2023", Y= 13 },
    new ChartData { X= "04/05/2023", Y= 4 },
    new ChartData { X= "04/05/2023", Y= 8 },
    new ChartData { X= "04/05/2023", Y= 5 },
    new ChartData { X= "05/05/2023", Y= 1 },
    new ChartData { X= "05/05/2023", Y= 1 },
    new ChartData { X= "05/05/2023", Y= 3 },
    new ChartData { X= "05/05/2023", Y= 4 },
    new ChartData { X= "05/05/2023", Y= 9 },
    new ChartData { X= "05/05/2023", Y= 17 },
    new ChartData { X= "05/05/2023", Y= 5 },
    new ChartData { X= "05/05/2023", Y= 10 },
    new ChartData { X= "05/05/2023", Y= 5 },
    new ChartData { X= "05/05/2023", Y= 12 },
    new ChartData { X= "06/05/2023", Y= 1 },
    new ChartData { X= "06/05/2023", Y= 1 },
    new ChartData { X= "06/05/2023", Y= 3 },
    new ChartData { X= "06/05/2023", Y= 10 },
    new ChartData { X= "06/05/2023", Y= 8 },
    new ChartData { X= "06/05/2023", Y= 13 },
    new ChartData { X= "06/05/2023", Y= 3 },
    new ChartData { X= "06/05/2023", Y= 8 }
};

модель

public class ChartData
{
    public string X { get; set; }
    public int Y { get; set; }

}

выход

введите сюда описание изображения

...вопрос больше по логике (линия отображается не корректно, и по моему это из за повторения данных икса(???или), я пошла по своей логике и подумала а как можно создать новый игрек объединив все игреки, если икс равен иксу)

то, что я пыталась сделать ❌необходима помощь (как в тулист вернуть результат)

    IEnumerable<ChartData>? chartsStatsListTest;
    protected override async Task OnInitializedAsync()
    {
        chartsStatsListTest = from chart in MedalDetails
                              group chart by chart.X into totalByDay
                              select new
                              {
                                  X = totalByDay.Key,
                                  Y = totalByDay.Sum(x => x.Y),
                              };
    }

если данные суммировать, то график показывает линию похожую на график, а не то, что наверху (это я вручную суммировала, и икс не повторяла в ChartData)

необходимый выход введите сюда описание изображения

Ответы

▲ 1Принят

решить можно переопределив ChartSeries source, сгрупировав по идентичной строке икс

IEnumerable<ChartData>? chartsStatsListTest;
protected override async Task OnInitializedAsync()
{
    var totalByDayToList = 
                from chart in MedalDetails
                group chart by chart.X into ChartData
                select new ChartData()
                {
                    X = ChartData.Key,
                    Y = ChartData.Sum(x => x.Y),
                };
    chartsStatsListTest = totalByDayToList.ToList();
}

и в DataSource я передаю сгрупированный список

<ChartSeriesCollection>
    <ChartSeries DataSource="chartsStatsListTest" XName="X" YName="Y" Type="ChartSeriesType.Line">
    </ChartSeries>
</ChartSeriesCollection>

результат корректно работает, если есть решения как улучшить ?