gpt4 book ai didi

c# - 尝试在我的WPF应用程序(ColumnSeries)中构建一个简单的实时图表

转载 作者:行者123 更新时间:2023-12-03 11:01:40 24 4
gpt4 key购买 nike

几天来,我一直在尝试将实时图表构建到我的WPF应用程序中。

我想要一个简单的图表。
列系列,应将int值显示为柱线并在时间戳下方。

我使用MVVM构建它,并尝试通过本教程找到解决方案。 https://lvcharts.net/App/examples/v1/wpf/Basic%20Column

我的XAML代码:
<lvc:CartesianChart>
<lvc:CartesianChart.Series>
<lvc:ColumnSeries Values="{Binding RawDataSeries, UpdateSourceTrigger=PropertyChanged}" />
</lvc:CartesianChart.Series>
<lvc:CartesianChart.AxisX >
<lvc:Axis Labels="{Binding Labels}">
<lvc:Axis.Separator>
<lvc:Separator Step="1"></lvc:Separator>
</lvc:Axis.Separator>
</lvc:Axis>
</lvc:CartesianChart.AxisX>
</lvc:CartesianChart>

我在viewmodel中的测试代码:

public void SetChart(int value)
{
var customerVmMapper = Mappers.Weighted<DateTimePoint>().X((x, index) => index).Y(x => x.Value);

Charting.For<DateTimePoint>(customerVmMapper);

var list = new List<DateTimePoint>()
{
new DateTimePoint() {Timestamp = DateTime.Now, Value = value},
new DateTimePoint() {Timestamp = DateTime.Now, Value = 78},
new DateTimePoint() {Timestamp = DateTime.Now, Value = 21}
};

var values = new ChartValues<DateTimePoint>();
foreach (var obj in list)
{
values.Add(obj);
}

RawDataSeries = values;
}

public ChartValues<DateTimePoint> RawDataSeries
{
get => _rawDataSeries;
set
{
_rawDataSeries = value;
OnPropertyChanged();
}
}

public class DateTimePoint
{
public DateTime Timestamp { get; set; }
public int Value { get; set; }
}

有人给我小费吗?

最佳答案

您需要指定数据对象的正确x/y映射,即x轴的间隔
和标签格式器以打印时间戳:

ChartModel.cs

public class ChartModel
{
public ChartModel()
{
CartesianMapper<DateTimePoint> mapper = Mappers.Xy<DateTimePoint>()
.X((item) => (double) item.Timestamp.Ticks / TimeSpan.FromMinutes(5).Ticks) // Set interval to 5 minutes
.Y(item => item.Value)
.Fill((item) => item.Value > 99 ? Brushes.Red : Brushes.Blue);

var series = new ColumnSeries()
{
Title = "Timestamp Values",
Configuration = mapper,
Values = new ChartValues<DateTimePoint>
{
new DateTimePoint() {Timestamp = DateTime.Now, Value = 100},
new DateTimePoint() {Timestamp = DateTime.Now.AddMinutes(15), Value = 78},
new DateTimePoint() {Timestamp = DateTime.Now.AddMinutes(30), Value = 21}
}
};
this.SeriesCollection = new SeriesCollection() { series };
}

public SeriesCollection SeriesCollection { get; set; }

public Func<double, string> LabelFormatter =>
value => new DateTime((long) value * TimeSpan.FromMinutes(5).Ticks).ToString("t");
}

DateTimePoint.cs
public class DateTimePoint
{
public DateTime Timestamp { get; set; }
public int Value { get; set; }
}

MainWindow.xaml
<CartesianChart Margin="20"
Height="300"
Series="{Binding SeriesCollection}"
LegendLocation="Left">
<CartesianChart.DataContext>
<viewModels:ChartModel />
</CartesianChart.DataContext>

<CartesianChart.AxisX>
<Axis Title="Timestamp"
LabelFormatter="{Binding LabelFormatter}">
</Axis>
</CartesianChart.AxisX>
</CartesianChart>

另请阅读 Live Charts: Date Time示例。

关于c# - 尝试在我的WPF应用程序(ColumnSeries)中构建一个简单的实时图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60192520/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com