첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170

TestProject.zip
0.01MB

▶ MainForm.cs

using System;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;

using ScottPlot;
using ScottPlot.Plottable;
using ScottPlot.Statistics;

namespace TestProject
{
    /// <summary>
    /// 메인 폼
    /// </summary>
    public partial class MainForm : Form
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - MainForm()

        /// <summary>
        /// 생성자
        /// </summary>
        public MainForm()
        {
            InitializeComponent();

            Plot plot = new Plot(800, 600);

            Random random = new Random(0);

            double[] maleHeightArray   = DataGen.RandomNormal(random, pointCount : 2345, mean : 178.4, stdDev : 7.6);
            double[] femaleHeightArray = DataGen.RandomNormal(random, pointCount : 1234, mean : 164.7, stdDev : 7.1);

            (double[] malePropabilityArray  , double[] binEdgeArray) = Common.Histogram(maleHeightArray  , min : 140, max : 210, binSize : 1, density : true);
            (double[] femalePropabilityArray, _                    ) = Common.Histogram(femaleHeightArray, min : 140, max : 210, binSize : 1, density : true);

            double[] leftEdgeArray = binEdgeArray.Take(binEdgeArray.Length - 1).ToArray();

            malePropabilityArray   = malePropabilityArray.Select(x => x * 100).ToArray();
            femalePropabilityArray = femalePropabilityArray.Select(x => x * 100).ToArray();

            BarPlot maleBarPlot = plot.AddBar(values : malePropabilityArray, positions : leftEdgeArray);

            maleBarPlot.BarWidth        = 1;
            maleBarPlot.BorderLineWidth = 0;
            maleBarPlot.FillColor       = Color.FromArgb(50, Color.Blue);

            BarPlot femaleBarPlot = plot.AddBar(values : femalePropabilityArray, positions : leftEdgeArray);

            femaleBarPlot.BarWidth        = 1;
            femaleBarPlot.BorderLineWidth = 0;
            femaleBarPlot.FillColor       = Color.FromArgb(50, Color.Red);

            double[] maleProbabilityDensityArray = Common.ProbabilityDensity(maleHeightArray, binEdgeArray, percent : true);

            plot.AddScatterLines
            (
                xs        : binEdgeArray,
                ys        : maleProbabilityDensityArray,
                color     : Color.FromArgb(150, Color.Blue),
                lineWidth : 3,
                label     : $"남성(n={maleHeightArray.Length:N0})"
            );

            double[] femaleProbabilityDensityArray = Common.ProbabilityDensity(femaleHeightArray, binEdgeArray, percent : true);

            plot.AddScatterLines
            (
                xs        : binEdgeArray,
                ys        : femaleProbabilityDensityArray,
                color     : Color.FromArgb(150, Color.Red),
                lineWidth : 3,
                label     : $"여성(n={femaleHeightArray.Length:N0})"
            );

            plot.Title("성별 인간 신장");
            plot.XLabel("신장(cm)");
            plot.YLabel("확률(%)");
            plot.Legend(location : Alignment.UpperLeft);
            plot.SetAxisLimits(yMin : 0);

            this.formsPlot.Reset(plot);

            this.formsPlot.Refresh();
        }

        #endregion
    }
}
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요