#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
})