3

我有以下代码:

let mychart = frame.GetAllSeries() |> Seq.iter(fun key value -> Chart.Line(value, Name=key) |> Chart.Combine

哪里frame.GetAllSeries()返回一个seq<KeyValuePair>。我想直接在图表中管道序列。我想我可以遍历这个序列。问题是我找不到一种惯用的方法来分别访问可以直接插入 lambda 表达式的键和值。

谢谢。

编辑

这有效:

let chart = frame.GetAllSeries() |> Seq.map( fun (KeyValue(k,v)) -> Chart.Line(v |> Series.observations, Name=k)) |> Chart.Combine

..它可以变得更简单吗?我有一个大型数据集,我担心性能会受到如此多的转换的影响。

4

1 回答 1

4

正如您已经知道的那样, usingSeries.observations为您提供了一系列键值对序列,然后您可以将其传递给Chart.Line等。

这绝对是不需要的东西,您可以使用扩展方法使代码更简单,让您自动绘制系列:

[<AutoOpen>]
module FsLabExtensions =
  type FSharp.Charting.Chart with
    static member Line(data:Series<'K, 'V>, ?Name, ?Title, ?Labels, ?Color, ?XTitle, ?YTitle) =
      Chart.Line(Series.observations data, ?Name=Name, ?Title=Title, ?Labels=Labels, ?Color=Color, ?XTitle=XTitle, ?YTitle=YTitle)

如果包含此内容,则可以直接绘制系列:

let s = series [ for x in 0.0 .. 0.1 .. 1.0 -> x, sin x ]
Chart.Line(s)

您还可以通过我们的实验包“FsLab”参考 Deedle & F# Charting,其中包含这些重载(参见此处

于 2013-11-20T21:07:46.417 回答