2

鉴于我在 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},
    },
4

2 回答 2

0

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>
},
于 2017-01-24T16:38:06.880 回答
0

我将假设您有一个用于数据的模型类,如果没有,我建议创建一个。我的 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)});
于 2017-01-24T10:22:37.747 回答