FSharpChart:同一图形上的两个刻度
FSharpChart: two scales on same graphic
我正在使用 FSharpChart 在同一图形上打印移动平均线和股票交易量。问题是一个图形从 20 到 50 或多或少,另一个从 0 到 8000 万,所以当我将两者组合时,一个被拆分到底部,这是无用的。我可以在 Y 轴上有两个不同的刻度,以便两个图形 "merge" 正确吗?
据我所知,您不能 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)])
生成具有完全不同比例的成分的组合图表:
如果您将其中一个系列的 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 有一些错误,某些自定义是 "infectious." 在创建 "good" 之后图表,即使我不想要它,次轴现在也会出现:
// 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]
我正在使用 FSharpChart 在同一图形上打印移动平均线和股票交易量。问题是一个图形从 20 到 50 或多或少,另一个从 0 到 8000 万,所以当我将两者组合时,一个被拆分到底部,这是无用的。我可以在 Y 轴上有两个不同的刻度,以便两个图形 "merge" 正确吗?
据我所知,您不能 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)])
生成具有完全不同比例的成分的组合图表:
如果您将其中一个系列的 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 有一些错误,某些自定义是 "infectious." 在创建 "good" 之后图表,即使我不想要它,次轴现在也会出现:
// 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]