2

私は tryfsharp.org のチャート作成と価格比較のチュートリアルに取り組んでおり、Fsharp.Charting ライブラリの Chart.Combine 関数は機能しませんが、Chart.Line などの他のチャートは機能します! 以下のコード。

// Helper function returns dates & closing prices from 2012
let recentPrices symbol = 
    let data = stockData symbol (DateTime(2012,1,1)) DateTime.Now
    [ for row in data.Data -> row.Date.DayOfYear, row.Close ]


Chart.Line(recentPrices "AAPL", Name="Apple") //These two guys work when I try to plot them.
Chart.Line(recentPrices "MSFT", Name="Microsoft")

Chart.Combine( // This guy will not plot. Syntax found here: http://fsharp.github.io/FSharp.Charting/PointAndLineCharts.html
   [ Chart.Line(recentPrices "AAPL", Name="Apple")
     Chart.Line(recentPrices "MSFT", Name="Microsoft")])
4

1 に答える 1

2

データ ジェネレーター関数をより単純なものに置き換え、最初にこのモックアップで正しいプロットを実現することをお勧めします。たとえば、次のスクリプトです。

#load @"<your path here>\Fsharp.Charting.fsx"
open System
open FSharp.Charting

let rand = System.Random
let recentPricesMock symbol =
    [for i in 1..12 -> DateTime(2012,i,1),rand.Next(100)]
Chart.Combine (
    [ Chart.Line(recentPricesMock "AAPL", Name="Apple")
      Chart.Line(recentPricesMock "MSFT", Name="Microsoft")])

私のローカルボックスと同じように、結合されたモックアップチャートを問題なくプロットする必要があります。recentPricesここから、と比較して元の問題の原因をドリルダウンできますrecentPricesMock

編集:問題のある完全なソースコードに到達した後、私が予想していたように、チャート自体ではなく、データの選択にある 2 つの問題を指摘できます。

まず、 の定義は、recentPrices日付を連続した年 ( row.Date.DayOfYear) に変換するため、2012 年から 2013 年への移行によってデータが台無しになり、その結果、グラフが台無しになります。recentPrices現在の機能を維持したい場合は、以下のように再定義するのが理にかなっています

let recentPrices symbol =
    let data = stockData symbol (DateTime(2012,1,1)) DateTime.Now
    [ for row in data.Data -> row.Date, row.Close ]

2 つ目は、1 つのチャートにうまく結合されていない 2 つの銘柄を選択したことです (AAPL は 100 ドル台、MSFT は 10 ドル台)。これにより、最初の問題からのデータ ポイントの繰り返しが追加されます。recentPrices上記の定義変更に加えて、コード AAPL を YHOO に変更した後

Chart.Combine ([
            Chart.Line(recentPrices "YHOO", Name="Yahoo")
            Chart.Line(recentPrices "MSFT", Name="Microsoft")
            ])

美しい滑らかなチャート コンボが得られます。 コンボチャート

于 2013-07-01T19:41:50.893 に答える