FSharpChart:同一图形上的两个比例

gio*_*ino 2 f# fsharpchart

我正在使用FSharpChart在同一图形上打印移动平均线和库存量.问题是一个图形从20到50或更少,另一个从0到80万,所以当我将两者合并时,一个被分割到底部,这是没用的.我可以在Y轴上有两个不同的刻度,以便两个图形"合并"正确吗?

lat*_*kin 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
Run Code Online (Sandbox Code Playgroud)

坏:

在此输入图像描述

好:

在此输入图像描述

这是有效的,但在我写完这个答案的快速测试中,似乎FSharp.Charting有一些错误,某些自定义是"传染性的".创建"好"图表后,即使我不想要它,现在也会出现辅助轴:

// 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]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 在此输入图像描述