첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
------------------------------------------------------------------------------------------------------------------------------------------------------
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[] valueArray = DataGen.RandomNormal(random, pointCount : 1234, mean : 178.4, stdDev : 7.6);

            (double[] countArray, double[] binEdgeArray) = Common.Histogram(valueArray, min : 140, max : 220, binSize : 1);

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

            BarPlot barPlot = plot.AddBar(values : countArray, positions : leftEdgeArray);

            barPlot.BorderLineWidth = 0;
            barPlot.FillColor       = ColorTranslator.FromHtml("#9bc3eb");

            double[] smoothEdgeArray = DataGen.Range(start : binEdgeArray.First(), stop : binEdgeArray.Last(), step : 0.1, includeStop : true);

            double[] smoothDensityArray = Common.ProbabilityDensity(valueArray, smoothEdgeArray, percent : true);

            ScatterPlot scatterPlot = plot.AddScatterLines
            (
                xs        : smoothEdgeArray,
                ys        : smoothDensityArray,
                lineWidth : 2,
                label     : "확률"
            );

            scatterPlot.YAxisIndex = 1;

            plot.YAxis2.Ticks(true);

            BasicStats basicStats = new BasicStats(valueArray);

            plot.AddVerticalLine(basicStats.Mean, Color.Black, 2, LineStyle.Solid, "평균");

            plot.AddVerticalLine(basicStats.Mean - basicStats.StDev, Color.Black, 2, LineStyle.Dash, "1 SD");
            plot.AddVerticalLine(basicStats.Mean + basicStats.StDev, Color.Black, 2, LineStyle.Dash);

            plot.AddVerticalLine(basicStats.Mean - basicStats.StDev * 2, Color.Black, 2, LineStyle.Dot, "2 SD");
            plot.AddVerticalLine(basicStats.Mean + basicStats.StDev * 2, Color.Black, 2, LineStyle.Dot);

            plot.AddVerticalLine(basicStats.Min, Color.Gray, 1, LineStyle.Dash, "최소/최대");
            plot.AddVerticalLine(basicStats.Max, Color.Gray, 1, LineStyle.Dash);

            plot.Legend(location : Alignment.UpperRight);

            plot.Title("성인 남성 신장");
            plot.XAxis.Label("신장(cm)");
            plot.YAxis.Label("횟수(#)");
            plot.YAxis2.Label("확률(%)");
            plot.SetAxisLimits(yMin : 0);
            plot.SetAxisLimits(yMin : 0, yAxisIndex : 1);

            this.formsPlot.Reset(plot);

            this.formsPlot.Refresh();
        }

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