2015-04-03 64 views
2

我試圖從FSharp圖表實現實時圖表。文檔here給出了一個類型簽名爲Live折線圖如下:F#圖表LiveChart實現Observable

static member LiveChart.Line : data:IObservable<#seq<'a1 * 'a2>> * ?Name:string * ?Title:string * ?Color:Color * ?XTitle:string * ?YTitle:string -> GenericChart (requires 'a1 :> key and 'a2 :> value) 

我已經發出時間序列與世界時間和價值觀,但什麼數據的的IObservable是的IObservable < #seq <「A1 *'a2 >>?!爲什麼這個函數的參數是一個巨大的元組?

+0

例如看? http://fsharp.github.io/FSharp.Charting/LiveChartSamples.html – 2015-04-03 13:52:28

+0

這並不是一個例子。它談到了Observables,但沒有說明它們是如何實現的。我目前有一個發射DateTime * float的Observable。我如何將它插入到LiveChart.Line中? – user3685285 2015-04-03 15:28:51

回答

2

您需要一個Observable,它可以發出一系列值爲DateTime * float的值,而不是單個數據點(我猜想不能從單個點中創建很多折線圖)。

如果您只有一次發出單個數據點的Observable,那麼我想您想要做的是讓另一個Observable將一個序列中的一系列觀察值累積起來,並將其用作數據您的圖表來源。

該函數的參數是一個「元組」,因爲它啓用了可選參數(否則跳過它們)。這是使用靜態成員以便從諸如可選參數或重載等事件中受益的常見模式,這些常規的限制F#函數不支持。

2

早些時候與觀察到的,直播走勢不工作,但我寫簡單的例子:

open System 
open System.Windows.Forms 
open System.Reactive.Linq 
open FSharp.Charting 

[<EntryPoint>] 
[<STAThread>] 
let main argv = 

    Application.EnableVisualStyles() 
    Application.SetCompatibleTextRenderingDefault false 

    let form = new Form(Visible = true, TopMost = true, 
          Width = 700, Height = 500) 
    let rand = new Random() 
    let obs = Observable.Interval(TimeSpan.FromSeconds(1.0)). 
       ObserveOn(WindowsFormsSynchronizationContext.Current) 
       |> Observable.map(fun _ -> DateTime.Now.ToShortTimeString(),rand.Next(0,21)) 

    let one = LiveChart.FastLineIncremental(obs,Name="Simple Example") 

    one.ShowChart() 
    Application.Run form 
    0 

也許這段代碼將有助於解決您的問題。經過一番分鐘工作:

enter image description here

如果我作爲一個新手,犯了嚴重錯誤,我希望網站的更有經驗的成員指正。我提前道歉,如果我給了不好的建議