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

时间:2015-07-08 23:28:54

标签: f# fsharpchart

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

2 个答案:

答案 0 :(得分:5)

如果您将其中一个系列的static{}设置为AxisType,则可以执行此操作。当然,您可以确保轴标签,图例等清楚地说明哪些数据映射到哪个比例。

AxisType.Secondary

为:

enter image description here

好:

enter image description here

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

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

enter image description here enter image description here

答案 1 :(得分:2)

据我所知,你不能Chart.Combine有独立尺度的图表。但是,您可以使用不同的组合器将它们堆叠在一起,例如使用Chart.Rows,如下面的代码段

#I @"C:\code\packages\FSharp.Charting.0.90.12"
#load "FSharp.Charting.fsx"

open FSharp.Charting
open System

let parabola = [ for x in 1.0 .. 1.0 .. 10.0 -> (x, (x ** 2.0) * 1000.0 ) ]
let curve = [ for i in 0.0 .. 0.02 .. 2.0 * Math.PI -> (sin i, cos i * sin i) ] 

Chart.Rows([Chart.Line(parabola); Chart.Line(curve)])

生成具有完全不同规模的成分的组合图表:

enter image description here