2020年4月1日水曜日

OxyPlot 1 ShowCases(1) Normal distribution

Normal distribution


Imports Oxyplot.Axes
Imports Oxyplot.Series

Public Class Form
    Private Sub Form_Load(sender As Object, e As EventArgs) Handles Me.Load
        Dim Model = New PlotModel With {
            .Title = "Normal distribution",
            .Subtitle = "Probability density function",
            .Background = OxyColors.White
        }
        Dim linearAxisY = New LinearAxis With {
            .Position = AxisPosition.Left,
            .Minimum = -0.05,
            .Maximum = 1.05,
            .MajorStep = 0.2,
            .MinorStep = 0.05,
            .TickStyle = TickStyle.Inside
        }
        Model.Axes.Add(linearAxisY)
        Dim linearAxisX = New LinearAxis With {
            .Position = AxisPosition.Bottom,
            .Minimum = -5.25,
            .Maximum = 5.25,
            .MajorStep = 1,
            .MinorStep = 0.25,
            .TickStyle = TickStyle.Inside
        }
        Model.Axes.Add(linearAxisX)
        Model.Series.Add(CreateNormalDistributionSeries(-5, 5, 0, 0.2))
        Model.Series.Add(CreateNormalDistributionSeries(-5, 5, 0, 1))
        Model.Series.Add(CreateNormalDistributionSeries(-5, 5, 0, 5))
        Model.Series.Add(CreateNormalDistributionSeries(-5, 5, -2, 0.5))
        PlotView.Model = Model
    End Sub
    Private Function CreateNormalDistributionSeries(ByVal x0 As Double, ByVal x1 As Double, ByVal mean As Double, ByVal variance As Double, Optional ByVal n As Integer = 1001) As DataPointSeries
        Dim ls = New LineSeries With {
            .Title = String.Format("μ={0}, σ²={1}", mean, variance)
        }
        For i As Integer = 0 To n - 1
            Dim x As Double = x0 + ((x1 - x0) * i / (n - 1))
            Dim f As Double = 1.0 / Math.Sqrt(2 * Math.PI * variance) * Math.Exp(-(x - mean) * (x - mean) / 2 / variance)
            ls.Points.Add(New DataPoint(x, f))
        Next i
        Return ls
    End Function
End Class

0 件のコメント:

コメントを投稿