37 people like it.
Like the snippet!
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()
use reader = new StreamReader(stream)
let html = reader.ReadToEnd()
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
More information