2

FSharpChart を使用して、移動平均と株の出来高を同じグラフィックに印刷しています。問題は、1 つのグラフィックが 20 から 50 に多かれ少なかれ、もう 1 つのグラフィックが 0 から 80 mln になることです。そのため、2 つを組み合わせると、1 つが下に分割され、これは役に立ちません。2 つのグラフィックが正しく「マージ」されるように、Y 軸に 2 つの異なるスケールを設定できますか?

4

2 に答える 2

5

AxisTypeシリーズのいずれかの を に設定すると、これを行うことができますAxisType.Secondary。もちろん、軸ラベル、凡例などで、どのデータがどのスケールにマップされているかを明確にするのはあなた次第です。

open FSharp.Charting
open System.Windows.Forms.DataVisualization.Charting

let squaresChart = [ 1 .. 100 ] |> List.map (fun n -> (n, n*n)) |> Chart.Line
let cubesChart   = [ 1 .. 100 ] |> List.map (fun n -> (n, n*n*n)) |> Chart.Line

let bad = 
    [ squaresChart 
      cubesChart ]
    |> Chart.Combine

let good = 
    [ squaresChart
      cubesChart |> Chart.WithSeries.AxisType(YAxisType = AxisType.Secondary) ]
    |> Chart.Combine

悪い:

ここに画像の説明を入力

良い:

ここに画像の説明を入力

これは機能しますが、この回答を書くために行った簡単なテストでは、FSharp.Charting にバグがあり、特定のカスタマイズが「伝染性」であるようです。「良い」チャートを作成した後、必要のない場合でも第 2 軸が表示されるようになりました。

// secondary axis sticks around
bad |> Chart.WithTitle(Text = "Why secondary axis?")

// now the title and the secondary axis *both* stick around!
Chart.Rows [bad; good]

ここに画像の説明を入力 ここに画像の説明を入力

于 2015-07-09T17:10:16.623 に答える