Home 소개       다운로드       온라인 설명서      주식/코인 차트    Q & A     Blog    

히포차트 4.3 - 정규분포 곡선 그리기







히포차트를 활용하여 c#, vb 코드를 통한 정규분포 그래프를 그리는 방법을 알아봅니다.

분산과 표준편차, 평균 등의 값이 필요하며 정규분포를 나타내는 공식을 통한 함수의 그래프를 그리는 방법을 소개합니다.




[히포차트 4.2] 엑셀 내보내기 기능 추가   [히포차트 4.2] 다중시리즈리스트 샘플   [히포차트 4.2] 마이크로차트를 위한 히든 객체 공개  히포차트 4.3 레포트 - 인쇄하기 샘플 (PrintDialog, PrintPreviewDialog)  히포차트 4.3 - 정규분포 곡선 그리기  히포차트 4.3 - Graphics 객체를 사용해 그래프 위에 다른 그림 그리기  히포차트 4.3 - 매틀랩(matlab) 스무싱 기법 (smoothing), 피크 지점 찾기 (Peak Detection)  


C#
 
Random r = new Random();
int[] datas = new int[10000];

for(int i = 0; i < 10000; i++)
{
datas.SetValue(r.Next(500, 3000), i);
}

// 합계
int sum = 0;

for(int i = 0; i < 10000; i++)
{
sum += datas[i];
}

// 평균
double m = sum / 10000;

// 분산
double b = 0;
// 표준편차
double s = 0;

for(int i = 0; i < 10000; i++)
{
b += Math.Pow(Math .Abs(Math.Abs(datas[i] - m)), 2);
}

b = b / 10000;

s = Math.Sqrt(b);

SeriesList sl = new SeriesList();
sl.AxisFactor.YAxis.Decimalpoint = 1;

sl.AxisFactor.XAxis.DataType = AxisDataType.Number;
sl.GraphArea.Grid.ZeroLineColor = Color.LightGray;
sl.AxisFactor.BackColor = Color.White;
sl.GraphArea.Grid.IsBackGridColor = false;

sl.SeriesCollection.Add( new Series ());
sl.SeriesCollection[0].Points.Width = 0;

for(int i = (int)(m - 5000); i < m + 5000; i++)
{
//double x = datas[i];
double y = Math .Exp((-1) * (Math.Pow( Math.Abs(i - m), 2)) / (2 * Math.Pow(s, 2))); //(1 / (Math.Sqrt(2 * Math.PI) * s) ) *

SeriesItem item = new SeriesItem();
item.XValue = i;
item.YValue = y;

if (i == 2500)
{
item.Balloon = new Balloon ();
item.Balloon.Label.Text = "표준편차 : " + s.ToString();
}

sl.SeriesCollection[0].items.Add(item);
}

// 평균
AxisTick TKM = new AxisTick(m);
TKM.IsShowGridLine = true;
//TKM.Label.Text = m.ToString();

sl.AxisFactor.XAxis.ExtraTicks.Add(TKM);

this.hHippoChart1.Designer.InnerBackColor = Color.WhiteSmoke;
this.hHippoChart1.DrawChart(sl);


VB
 

Dim r As New. Random()
Dim datas As Integer() = New Integer(9999) {}

For i As Integer = 0 To 9999
datas.SetValue(r.[Next](500, 3000), i)
Next

` 합계
Dim sum As Integer = 0

For i As Integer = 0 To 9999
sum += datas(i)
Next

` 평균
Dim m As Double = sum / 10000

` 분산
Dim b As Double = 0
` 표준편차
Dim s As Double = 0

For i As Integer = 0 To 9999
b += Math.Pow(Math.Abs(Math.Abs(datas(i) - m)), 2)
Next

b = b / 10000

s = Math.Sqrt(b)

Dim sl As New. SeriesList()
sl.AxisFactor.YAxis.Decimalpoint = 1

sl.AxisFactor.XAxis.DataType = AxisDataType.Number
sl.GraphArea.Grid.ZeroLineColor = Color.LightGray
sl.AxisFactor.BackColor = Color.White
sl.GraphArea.Grid.IsBackGridColor = False

sl.SeriesCollection.Add(New Series())
sl.SeriesCollection(0).Points.Width = 0

For i As Integer = CInt(m - 5000) To m + 4999
`double x = datas[i];
Dim y As Double = Math.Exp((-1) * (Math.Pow(Math.Abs(i - m), 2)) / (2 * Math.Pow(s, 2)))
`(1 / (Math.Sqrt(2 * Math.PI) * s) ) *
Dim item As New. SeriesItem()
item.XValue = i
item.YValue = y

If i = 2500 Then
item.Balloon = New Balloon()
item.Balloon.Label.Text = "표준편차 : " + s.ToString()
End If

sl.SeriesCollection(0).items.Add(item)
Next

` 평균
Dim TKM As New. AxisTick(m)
TKM.IsShowGridLine = True
`TKM.Label.Text = m.ToString();

sl.AxisFactor.XAxis.ExtraTicks.Add(TKM)

Me.hHippoChart1.Designer.InnerBackColor = Color.WhiteSmoke
Me.hHippoChart1.DrawChart(sl)



※ 히포차트 샘플 코드는 버전별로 상이한 결과를 나타낼 수 있습니다.

이 코드 관련 문의 사항은 페이스북 리플을 달아주시거나 아래 이메일로 이 페이지 주소와 함께 문의주세요.

helpdesk@hippochart.com





Copyright © 2009-2018 HippoChart. Inc.  All Rights Reserved.