37 people like it.

# Plotting using Chart сontrol

This snippet shows how to plot data on a form using .NET 4.0 Chart control.

 ``` 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: ``` ``````(Opening declarations) // Based on a code by James Hugard, available here: // http://stackoverflow.com/questions/3276357/how-do-i-plot-a-data-series-in-f // Create a window with Chart control and initializes // the chart control using a given function type Visualiser(title, style, init_fun:Chart->unit) = inherit Form( Text=title ) let chart = new Chart(Dock=DockStyle.Fill) let area = new ChartArea(Name=title) let series = new Series() do series.ChartType <- style do series.ChartArea <- title do chart.Series.Add(series) do chart.ChartAreas.Add(area) do init_fun chart do base.Controls.Add(chart) // Visualises a series of float values // Returns a Form let SeqVisualiser title style (xs: float seq) = new Visualiser(title,style,fun chart -> xs |> Seq.iter (chart.Series.[0].Points.Add >> ignore)) // Visualizes a series of float pairs treated as (x,y) coordinats // Returns a Form let PointVisualiser title style xs = new Visualiser(title,style, fun chart -> xs |> Seq.iter (fun (x,y) -> chart.Series.[0].Points.AddXY(x,y)|>ignore)) // Visualizes a series of float values with labels let LabelVisualiser3D title style xs = new Visualiser(title,style, fun chart -> chart.ChartAreas.[0].Area3DStyle.Enable3D <- true chart.ChartAreas.[0].Area3DStyle.Perspective <- 10 xs |> Seq.iter (fun (y:string,x:float) -> let pt = chart.Series.[0].Points.Add(x) pt.Label <- y)) // Plotting sin function let V1 = SeqVisualiser "Data" (SeriesChartType.Line) (seq {-6.0..0.01..6.0}|> Seq.map sin) V1.Show() // Plotting bars with random values let V2 = SeqVisualiser "Data" SeriesChartType.Bar (seq { let R = new System.Random() for i in [1..10] -> R.NextDouble()*3.0 }) V2.Show() // Plotting a number or random (x,y)-points let V3 = PointVisualiser "Data" SeriesChartType.Bubble (seq { let R = new System.Random() for i in [1..10] -> (R.NextDouble()*3.0,R.NextDouble()*3.0) }) V3.Show() // Plotting some statistics about occurence of strings in HTML page (Opening declarations) let http(url: string) = (fetch HTML from given URL) let page = http "http://osys.ru/" let count s page = Regex.Matches(page,s).Count let os = ["Windows";"UNIX";"Linux";"DOS"] |> Seq.map (fun s -> (s,float(count s page))) let V4 = LabelVisualiser3D "OS" SeriesChartType.Pie os V4.Show() ``````
open System.Drawing
open System.Windows.Forms
#r "System.Windows.Forms.DataVisualization"
open System.Windows.Forms.DataVisualization.Charting
Multiple items
type Visualiser =
inherit Form
new : title:string * style:SeriesChartType * init_fun:(Chart -> unit) -> Visualiser

Full name: Script.Visualiser

--------------------
new : title:string * style:SeriesChartType * init_fun:(Chart -> unit) -> Visualiser
val title : string
val style : SeriesChartType
val init_fun : (Chart -> unit)
Multiple items
type Chart =
inherit Control
new : unit -> Chart
member AlignDataPointsByAxisLabel : unit -> unit + 3 overloads
member Annotations : AnnotationCollection
member AntiAliasing : AntiAliasingStyles with get, set
member ApplyPaletteColors : unit -> unit
member BackColor : Color with get, set
member BackGradientStyle : GradientStyle with get, set
member BackHatchStyle : ChartHatchStyle with get, set
member BackImage : string with get, set
member BackImageAlignment : ChartImageAlignmentStyle with get, set
...

Full name: System.Windows.Forms.DataVisualization.Charting.Chart

--------------------
Chart() : unit
type unit = Unit

Full name: Microsoft.FSharp.Core.unit
Multiple items
type Form =
inherit ContainerControl
new : unit -> Form
member AcceptButton : IButtonControl with get, set
member Activate : unit -> unit
member ActiveMdiChild : Form
member AddOwnedForm : ownedForm:Form -> unit
member AllowTransparency : bool with get, set
member AutoScale : bool with get, set
member AutoScaleBaseSize : Size with get, set
member AutoScroll : bool with get, set
member AutoSize : bool with get, set
...
nested type ControlCollection

Full name: System.Windows.Forms.Form

--------------------
Form() : unit
namespace System.Drawing.Text
val chart : Chart
type DockStyle =
| None = 0
| Top = 1
| Bottom = 2
| Left = 3
| Right = 4
| Fill = 5

Full name: System.Windows.Forms.DockStyle
field DockStyle.Fill = 5
val area : ChartArea
Multiple items
type ChartArea =
inherit ChartNamedElement
new : unit -> ChartArea + 1 overload
member AlignWithChartArea : string with get, set
member AlignmentOrientation : AreaAlignmentOrientations with get, set
member AlignmentStyle : AreaAlignmentStyles with get, set
member Area3DStyle : ChartArea3DStyle with get, set
member Axes : Axis[] with get, set
member AxisX : Axis with get, set
member AxisX2 : Axis with get, set
member AxisY : Axis with get, set
member AxisY2 : Axis with get, set
...

Full name: System.Windows.Forms.DataVisualization.Charting.ChartArea

--------------------
ChartArea() : unit
ChartArea(name: string) : unit
val series : Series
Multiple items
type Series =
inherit DataPointCustomProperties
new : unit -> Series + 2 overloads
member AxisLabel : string with get, set
member ChartArea : string with get, set
member ChartType : SeriesChartType with get, set
member ChartTypeName : string with get, set
member EmptyPointStyle : DataPointCustomProperties with get, set
member Enabled : bool with get, set
member IsXValueIndexed : bool with get, set
member Legend : string with get, set
member MarkerStep : int with get, set
...

Full name: System.Windows.Forms.DataVisualization.Charting.Series

--------------------
Series() : unit
Series(name: string) : unit
Series(name: string, yValues: int) : unit
property Series.ChartType: SeriesChartType
property Series.ChartArea: string
property Chart.Series: SeriesCollection
System.Collections.ObjectModel.Collection.Add(item: Series) : unit
SeriesCollection.Add(name: string) : Series
property Chart.ChartAreas: ChartAreaCollection
System.Collections.ObjectModel.Collection.Add(item: ChartArea) : unit
ChartAreaCollection.Add(name: string) : ChartArea
val SeqVisualiser : title:string -> style:SeriesChartType -> xs:seq<float> -> Visualiser

Full name: Script.SeqVisualiser
val xs : seq<float>
Multiple items
val float : value:'T -> float (requires member op_Explicit)

Full name: Microsoft.FSharp.Core.Operators.float

--------------------
type float = System.Double

Full name: Microsoft.FSharp.Core.float

--------------------
type float<'Measure> = float

Full name: Microsoft.FSharp.Core.float<_>
Multiple items
val seq : sequence:seq<'T> -> seq<'T>

Full name: Microsoft.FSharp.Core.Operators.seq

--------------------
type seq<'T> = System.Collections.Generic.IEnumerable<'T>

Full name: Microsoft.FSharp.Collections.seq<_>
module Seq

from Microsoft.FSharp.Collections
val iter : action:('T -> unit) -> source:seq<'T> -> unit

Full name: Microsoft.FSharp.Collections.Seq.iter
val ignore : value:'T -> unit

Full name: Microsoft.FSharp.Core.Operators.ignore
val PointVisualiser : title:string -> style:SeriesChartType -> xs:seq<float * float> -> Visualiser

Full name: Script.PointVisualiser
val xs : seq<float * float>
val x : float
val y : float
val LabelVisualiser3D : title:string -> style:SeriesChartType -> xs:seq<string * float> -> Visualiser

Full name: Script.LabelVisualiser3D
val xs : seq<string * float>
val y : string
Multiple items
val string : value:'T -> string

Full name: Microsoft.FSharp.Core.Operators.string

--------------------
type string = System.String

Full name: Microsoft.FSharp.Core.string
val pt : DataPoint
property DataPointCustomProperties.Label: string
val V1 : Visualiser

Full name: Script.V1
type SeriesChartType =
| Point = 0
| FastPoint = 1
| Bubble = 2
| Line = 3
| Spline = 4
| StepLine = 5
| FastLine = 6
| Bar = 7
| StackedBar = 8
| StackedBar100 = 9
...

Full name: System.Windows.Forms.DataVisualization.Charting.SeriesChartType
field SeriesChartType.Line = 3
val map : mapping:('T -> 'U) -> source:seq<'T> -> seq<'U>

Full name: Microsoft.FSharp.Collections.Seq.map
val sin : value:'T -> 'T (requires member Sin)

Full name: Microsoft.FSharp.Core.Operators.sin
Control.Show() : unit
Form.Show(owner: IWin32Window) : unit
val V2 : Visualiser

Full name: Script.V2
field SeriesChartType.Bar = 7
val R : System.Random
namespace System
Multiple items
type Random =
new : unit -> Random + 1 overload
member Next : unit -> int + 2 overloads
member NextBytes : buffer:byte[] -> unit
member NextDouble : unit -> float

Full name: System.Random

--------------------
System.Random() : unit
System.Random(Seed: int) : unit
val i : int
System.Random.NextDouble() : float
val V3 : Visualiser

Full name: Script.V3
field SeriesChartType.Bubble = 2
open System.IO
open System.Text.RegularExpressions
val http : url:string -> string

Full name: Script.http
val url : string
let req = System.Net.WebRequest.Create(url)
use resp = req.GetResponse() // note 'use' = C# 'using'
use stream = resp.GetResponseStream()
html
val page : string

Full name: Script.page
val count : s:string -> page:string -> int

Full name: Script.count
val s : string
val page : string
Multiple items
type Regex =
new : pattern:string -> Regex + 1 overload
member GetGroupNames : unit -> string[]
member GetGroupNumbers : unit -> int[]
member GroupNameFromNumber : i:int -> string
member GroupNumberFromName : name:string -> int
member IsMatch : input:string -> bool + 1 overload
member Match : input:string -> Match + 2 overloads
member Matches : input:string -> MatchCollection + 1 overload
member Options : RegexOptions
member Replace : input:string * replacement:string -> string + 5 overloads
...

Full name: System.Text.RegularExpressions.Regex

--------------------
Regex(pattern: string) : unit
Regex(pattern: string, options: RegexOptions) : unit
Regex.Matches(input: string, pattern: string) : MatchCollection
Regex.Matches(input: string, pattern: string, options: RegexOptions) : MatchCollection
val os : seq<string * float>

Full name: Script.os
val V4 : Visualiser

Full name: Script.V4
field SeriesChartType.Pie = 17