我有以下代码:
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
..它可以变得更简单吗?我有一个大型数据集,我担心性能会受到这么多转换的影响。
答案 0 :(得分:4)
正如您已经想到的那样,使用Series.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)
你也可以参考Deedle&amp; F#通过包含这些重载的实验包“FsLab”绘制图表(参见here)