MS图表控制范围栏

时间:2014-08-14 15:49:35

标签: f# mschart

我试图以某种方式复制范围条形图here

enter image description here

我找到this reference但我没有完全掌握代码。

我所拥有的是一系列任务(有时在不同时期完成)。

let d = [("task1", DateTime.Parse("11/01/2014 08:30"), DateTime.Parse("12/01/2014 10:30")); 
         ("task2", DateTime.Parse("15/01/2014 09:30"), DateTime.Parse("16/01/2014 10:30"));
         ("task3", DateTime.Parse("11/01/2014 08:30"), DateTime.Parse("16/01/2014 10:30"))]
let chart = d |> FSharp.Charting.Chart.RangeBar
chart.ShowChart()

我很难理解API的逻辑。


我也尝试过:

let chart = new Windows.Forms.DataVisualization.Charting.Chart(Dock = DockStyle.Fill)
let area = new ChartArea("Main")
chart.ChartAreas.Add(area)
let mainForm = new Form(Visible = true, TopMost = true, Width = 700, Height = 500)
mainForm.Controls.Add(chart)
let seriesColumns = new Series("NameOfTheSerie")
seriesColumns.ChartType <- SeriesChartType.RangeBar

type SupportToChart(serieVals: Series) = 
    member this.addPointXY(lbl, [<ParamArray>] yVals: Object[]) = 
        serieVals.Points.AddXY(lbl, yVals) |> ignore

let supporter = SupportToChart(seriesColumns)
supporter.addPointXY("AAA", DateTime.Parse("11/01/2014 08:30"), DateTime.Parse("12/01/2014 10:30") )

导致

  

System.ArgumentOutOfRangeException:您只能为其设置1个Y值   这个数据点。

从那时起API中有什么变化吗?

2 个答案:

答案 0 :(得分:0)

我不完全确定F#Charting目前足够强大,能够重建上面的图表。但是,其中一个问题似乎是它将日期视为float值(由于某种原因)并错误地猜测了范围。如果您使用以下内容,至少可以看到图表:

Chart.RangeBar(d)
|> Chart.WithYAxis(Min=41650.0, Max=41660.0)

请在GitHub上将此问题作为问题提交。如果你想更深入地了解F#Charting如何工作并帮助我们解决这个问题,那将是惊人的: - )

答案 1 :(得分:0)

诀窍是用

初始化系列
let serie = new Series("Range", yValues)

其中yValues定义“Y值”的最大数量。