鉴于我在 MongoDB 中的数据结构就像上面那样。我如何将它们用于以下代码,我想使用 NodeId 作为我的标题和 WT 的值作为我的图表值。请忽略我在 ChartValues 的标题和值中输入的内容。
new LineSeries
{
Title = "Screws",
Values = new ChartValues<double> {4.5, 4.5, 4.45, 4.4, 4.4, 4.35, 4.35},
},
鉴于我在 MongoDB 中的数据结构就像上面那样。我如何将它们用于以下代码,我想使用 NodeId 作为我的标题和 WT 的值作为我的图表值。请忽略我在 ChartValues 的标题和值中输入的内容。
new LineSeries
{
Title = "Screws",
Values = new ChartValues<double> {4.5, 4.5, 4.45, 4.4, 4.4, 4.35, 4.35},
},
LiveCharts 的最佳功能之一是您可以绘制任何您想要的类型,并且您是类型安全的,考虑到您想要绘制WT
具有给定IEnumerable
类型Value
的属性。
public class Value
{
public ObjectId _id { get; set; }
public Event @event { get; set;}
}
public class Event
{
public string NodeId {get;set;}
public double WT {get;set;}
}
您可以教库绘制您想要的任何类型,在这种情况下,让我们教它WT
从类型中绘制属性Value
:
var mapper = Mappers.XY<Value>()
.X((index,value) => index)
.Y((i,v) => (double) v.@event.WT);
Charting.For<Value>(mapper);
所以换句话说,这意味着,每次库找到一个ChartValues<Value>
实例时,它都会使用我们设置的映射器。映射器非常直观,这意味着我们将使用从零开始的索引作为 X 坐标,并将WT
属性作为 Y。
此行通常需要在应用程序启动时添加,有很多方法可以教库如何绘制自定义类型,更多信息请参阅https://lvcharts.net/App/examples/v1/wpf/Types% 20和%20配置
就是这样,现在您可以直接Value
打印类型
IEnumerable<Value> dataSource = // source from data base...
new LineSeries
{
Title = "Screws",
Values = dataSource.AsChartValues(), //converts the source to
//an instance of ChartValues<Value>
},
我将假设您有一个用于数据的模型类,如果没有,我建议创建一个。我的 json 模型如下所示:
public class Value
{
public ObjectId _id { get; set; }
public Event @event { get; set;}
}
public class Event
{
public string NodeId {get;set;}
public string FirmwareVER {get;set;}
public double SignalSTR {get;set;}
public double battery {get;set;}
public double CEL {get;set;}
public double WT {get;set;}
public string Onlinestat {get;set;}
public double timeStamp {get;set;}
}
在这种情况下,您可以从收集中汇总您的数据:
var collection = db.GetCollection<Value>("chart");
var res = collection.Aggregate()
.Group(x => x.@event.NodeId,
x => new {Name = x.Key, WTs = x.Select(r => r.@event.WT).ToList()})
.ToList();
这将是我使用的一些示例数据的结果:
之后,您可以将数据添加到图表中,例如:
res.Select(r => new LineSeries{Title = r.Name, Values = new ChartValues<double>(r.WTs)});