用F#语言使用FSharp.Charting开源库画图
本文源程序来自F#DeepDives中第二部分第4节,做个部分修改,去掉了数值模拟函数部分的功能,旨在学习用F#和Charting开源库画图。文中附带一段测试代码,文件是脚本格式.fsx,如有错误望改正。
可按下面步骤使用:
1.新建.fsx文件,导入<FSharp.Charting和DataVisualization包。
2.设置横坐标长度T和采样个数N.
3.将所画的数据绑定到paths上,数据为二(n)维浮点型数组。
4.用plot_path函数将相应的线条颜色绑定到相应线条数据上,并赋值给path_charts;设置纵坐标的最大最小值。
5.设置图的主标题,并对横/纵坐标设置相应的格式,最后画图。
6.全选代码,按Alt+Enter运行。
完整代码:
<pre name="code" class="plain">#r @"..\packages\FSharp.Charting.0.90.6\lib\net40\FSharp.Charting.dll"
#r "System.Windows.Forms.DataVisualization.dll"
open System
open System.Drawing
open FSharp.Charting
let T = 100.0
let N = 100
let paths = [|[|for i in 1.0..100.0 do yield i*(i+1.0)|];[|100.0..100.0..10000.0 |]|]//数组中的值是纵坐标
///将所给数据画出。T:横坐标长度,N:横坐标采样个数,path:所给数据(二维float数组),color:线条颜色
let plot_path (T:float) (N:int) (path:float array) color =
let dt = T/ (float N)
path |> Array.mapi (fun n p -> ((float n)*dt, p))
|> Chart.Line
|> Chart.WithStyling(Color = color, BorderWidth = 2)
let colors = [| Color.Green; Color.Red|]//线条颜色
let path_charts = Array.map2 (plot_path T N) paths colors//将相应的线条颜色绑定到线条数据上
let mx, mn = paths |> Array.fold (fun (mx,mn) p ->
(max mx (Array.max p), min mn (Array.min p)))
(Double.MinValue,Double.MaxValue)
//图标题
let title = sprintf
"Testing, T=%.2f, N=%d" T N
let chart = Chart.Combine path_charts
|> Chart.WithStyling(Margin=(2.0, 12.0, 2.0, 2.0))
|> Chart.WithTitle(Text=title, FontName = "Arial", FontSize = 14.0,
FontStyle = FontStyle.Bold, InsideArea = false)
|> Chart.WithXAxis(Title="横坐标", Max=T, Min=0.0,
TitleAlignment = StringAlignment.Center,
TitleFontName = "Arial",
TitleFontSize = 14.0, TitleFontStyle = FontStyle.Bold)
|> Chart.WithYAxis(Title="纵坐标",
Max=(Math.Round(mx) + 1.0), Min=(Math.Round(mn) - 1.0),
TitleAlignment = StringAlignment.Center,
TitleFontName = "Arial",
TitleFontSize = 14.0, TitleFontStyle = FontStyle.Bold)
chart.ShowChart()