LiveCharts CartesianChart показывает только одно значение из каждой серии

#vb.net #livecharts

#vb.net #живые диаграммы

Вопрос:

У меня довольно простая диаграмма: ось X — это диапазон дат (30-минутные интервалы), а ось Y — просто двойная. Есть две серии: MainSeries и CheckSeries .

Что бы я ни делал, на диаграмме будет отображаться только одно значение:

диаграмма только с первым значением из каждой серии

Вот как я строю свою диаграмму:

 Dim MainSeries As New GColumnSeries With {
        .Title = "Main",
        .ColumnPadding = 1,
        .Fill = New SolidColorBrush(Color.FromArgb(blue.A, blue.R, blue.G, blue.B)),
        .Values = New GearedValues(Of Double)(MainValues)
    }

    Dim CheckSeries As New GColumnSeries With {
        .Title = "Check",
        .ColumnPadding = 1,
        .Fill = New SolidColorBrush(Color.FromArgb(grey.A, grey.R, grey.G, grey.B)),
        .Values = New GearedValues(Of Double)(CheckValues)
    }

    chtMain.Series = New SeriesCollection From {
        MainSeries,
        CheckSeries
    }

    chtMain.AxisX.Add(New Axis With {
        .Title = "DateTime",
        .Labels = LogDates,
        .Unit = 1,
        .MinRange = 48,
        .MaxRange = 340
    })

    'Tried adding this to AxisX but doesn't make any difference
    '.LabelFormatter = Function(value) New DateTime(CLng(value * TimeSpan.FromMinutes(30).Ticks)).ToString("t"),

    chtMain.AxisY.Add(New Axis With {
        .Title = "Consumption",
        .LabelFormatter = Function(value) value.ToString("N"),
        .MinValue = 0,
        .MaxValue = yAxisMax   10
    })

  

В моем тестовом примере каждая серия имеет 289 значений. Вы также можете заметить, что максимум по оси Y установлен соответствующим образом для других данных, которые не видны. В противном случае я бы ожидал, что максимум будет около 50.

Я перепробовал все комбинации Unit , MinRange , MaxRange по оси X, и ни одна из них не имела никакого значения.

Есть идеи?

Ответ №1:

В конце концов я нашел правильную комбинацию свойств.

Это AxisX.LabelFormatter должна быть функция, которая преобразуется в a DateTime с шагом в полчаса, но мне также приходилось MinValue использовать и MaxValue без MinRange or MaxRange . Похоже Range , что свойства перезаписывают Value свойства.

Итак, моя ось X теперь выглядит так:

 chtMain.AxisX.Add(New Axis With {
            .Title = "DateTime",
            .Labels = LogDates,
            .LabelFormatter = Function(value) New DateTime(CLng(value)).ToString("dd/MM/yy HH:mm"),
            .MinValue = 0,
            .MaxValue = 48
        })