트레이닝 센터

데이터 분석 & 시각화

C1Chart:업종 데이터 분석(상)

ComponentOne Chart for WinForms는 80여종의 2D와 3D 그래프유형을 포함합니다. 코드의 그래프설계장치 없이 유연하게 그래프요소를 확정할 수 있습니다. 최종 사용자가 조정 가능한 최상의 시각효과와 우수한 마우스 추적 능력 등을 갖추고 있습니다.

ComponentOne Chart for WinForms를 사용하여 데이터 분석시스템을 업그레이드할 수 있습니다.

본문은 업종데이터 분석의 관점에서 금융그래프, 수학통계, 등고선 및 등고구역을 포함하는 C1Chart의 그래프를 소개합니다. 전반부에서는 주로 금융그래프와 데이터 통계 부분을 설명합니다.


금융그래프

금융업종은 일반적으로 캔들 차트로 가격변동을 표시하거나 HLOC그래프로 주가의 경향을 표시합니다. 이제는 ComponentOne가 제공하는 금융 그래프를 직접 WinForms응용프로그램에 드래그하여 최종 사용자에게 금융정보를 표시하고 결정을 내리도록 도울 수 있습니다. C1Chart금융그래프는 다음의 그림과 같이 표시됩니다.


C1Chart데이터소스 설정: C1Chart.DataSource속성을 통해 데이터소스를 설정해줍니다.

C1Chart그래프유형 설정: 금융그래프는 일반적으로 캔들 차트로 가격변동을 표시하거나 HLOC그래프로 주가의 경향을 표시해야 합니다.
이것은 C1Chart의ChartGroup.Group.ChartType열거 유형을 통해 실현할 수 있습니다. 구체적인 설정 코드는 다음과 같습니다.

ResetChart();
//금융그래프 설정은 캔들 차트 구성입니다.
	if (radChartGroups.Checked)
            {
                ChartGroup g = c1Chart1.ChartGroups.Group0;
                g.ChartType = C1.Win.C1Chart.Chart2DTypeEnum.Candle;
                g.ChartData.SeriesList[0].LineStyle.Thickness = 2;
                c1Chart1.ChartGroups.Group1.Visible = true;
                c1Chart1.ChartArea.AxisY2.Visible = true;
            }
//금융그래프 설정은 HiLo스위치입니다.
	else if (radHiLoOpenClose.Checked)
            {
                c1Chart1.ChartGroups.Group0.ChartType = C1.Win.C1Chart.Chart2DTypeEnum.HiLoOpenClose;
            }
//금융그래프 설정은 캔들 차트입니다.
	else if (radCandle.Checked)
            {
                ChartGroup g = c1Chart1.ChartGroups.Group0;
                g.ChartType = C1.Win.C1Chart.Chart2DTypeEnum.Candle;
                g.ChartData.SeriesList[0].LineStyle.Thickness = 2;
            }
//금융그래프 설정은 HiLo입니다.
	else
            {
                c1Chart1.ChartGroups.Group0.ChartType = C1.Win.C1Chart.Chart2DTypeEnum.HiLo;
            }

그 다음은 C1Chart의 서열을 만듭니다. 본문의 Demo에서는 네 개의 Series를 만들어 보았습니다. 각각 전도율, ph, 온도, 압력입니다. 이 네 개의 Series는 각각 색상으로 구별하여 표시합니다. 구체적인 코드는 다음과 같습니다. :


// Create chart series
            c1Chart1.ChartGroups[0].ChartData.SeriesList.Clear();
            cdsTemp = c1Chart1.ChartGroups[0].ChartData.SeriesList.AddNewSeries();
            cdsPress = c1Chart1.ChartGroups[0].ChartData.SeriesList.AddNewSeries();
            cdsCond = c1Chart1.ChartGroups[0].ChartData.SeriesList.AddNewSeries();
            cdsPh = c1Chart1.ChartGroups[0].ChartData.SeriesList.AddNewSeries();

            cdsTemp.SymbolStyle.Shape = SymbolShapeEnum.None;
            cdsTemp.LineStyle.Color = Color.FromArgb(150, 32, 132);
            cdsTemp.LineStyle.Thickness = 2;
            cdsPress.SymbolStyle.Shape = SymbolShapeEnum.None;
            cdsPress.LineStyle.Color = Color.FromArgb(42, 2, 153);
            cdsPress.LineStyle.Thickness = 2;
            cdsCond.SymbolStyle.Shape = SymbolShapeEnum.None;
            cdsCond.LineStyle.Color = Color.FromArgb(0, 114, 160);
            cdsCond.LineStyle.Thickness = 2;
            cdsPh.SymbolStyle.Shape = SymbolShapeEnum.None;
            cdsPh.LineStyle.Color = Color.FromArgb(100, 126, 52);
            cdsPh.LineStyle.Thickness = 2;

수학통계

C1Chart은 이산 데이터 속에 포함된 평균, 최빈수, 평균분포 등의 통계치를 연구할 때 편리합니다. 산포도와 히스토그램을 사용하여 이산 데이터를 분석하여 더욱 편리하게 사용할 수 있고 데이터 샘플 속에서 필요한 정보를 찾는 데도 도움을 줍니다. C1Chart 데이터 통계치 히스토그램은 아래에 표시된 것과 같습니다. 이것은 산포 데이터가 십자선 거리의 빈도 히스토그램까지 이른 것입니다.


C1Chart그래프 만들기: 본문의 수리통계 demo 에서 탭과 산포데이터로 첫 번째 ChartGroup에 C1Chart을 만들고 두 번째 ChartGroup에 Histogram을 만듭니다. 이때 두 번째의 ChartGroup에는 데이터를 추가하지는 않습니다. 자세한 코드는 Demo의Histogram을 참고합니다.


C1Chart의Histogram만들기: ChartHistogram을 사용하여 대상의 DisplayType 속성을 통해 히스토그램, 빈도그래프, 스텝 빈도그래프 형식으로 간격과 수량을 표시합니다. Demo에서는 이산 데이터가 두 번째 ChartGroup에 Histogram을 만들고 각 산포 데이터를 바탕으로 탭 되는 교차 거리를 표시합니다. 코드는 다음을 참고합니다. ;


//create a Histogram in the second chart group using the scatter data
            //and the distance from the marker intersection as data for the histogram.
            ChartGroup cg = c1Chart1.ChartGroups[1];

            //start by adding a Normal (Gaussian) distribution curve.  This is available
            //as a convenient reference to compare the histogram shape.
            NormalCurve nc = cg.Histogram.NormalDisplay;
            nc.FillStyle.Alpha = 64;
            nc.FillStyle.Color1 = Color.Yellow;
            nc.Visible = c1Chart1.ChartGroups[1].Histogram.NormalDisplay.Visible;

            cg.ChartType = Chart2DTypeEnum.Histogram;

            ChartDataSeries cds = cg.ChartData.SeriesList.AddNewSeries();
            cds.FitType = FitTypeEnum.Spline;
            cds.FillStyle.Alpha = 64;
            cds.FillStyle.Color1 = Color.Blue;

            cds.Histogram.IntervalCreationMethod = IntervalMethodEnum.SemiAutomatic;
            cds.Histogram.DisplayType = DisplayTypeEnum.Histogram;
            cds.Histogram.IntervalStart = 0;
            cds.Histogram.IntervalWidth = 10;
            cds.Histogram.IntervalNumber = 10;

            C1.Win.C1Chart.Label lab = c1Chart1.ChartLabels.LabelsCollection.AddNewLabel();
            lab.AttachMethod = AttachMethodEnum.DataCoordinate;
            lab.AttachMethodData.X = 100;
            lab.AttachMethodData.Y = 0;
            lab.AttachMethodData.GroupIndex = 0;
            lab.Offset = 50;
            lab.Name = "overflow";
            lab.Text = "";
            lab.Compass = LabelCompassEnum.South;
            lab.Visible = true;

Histogram데이터 기입: Demo에서는 기입한 Histogram 데이터 탭에 따릅니다.

		//get the Target Coordinates
                double xtarget = carea.AxisX.ValueLabels[0].NumericValue;
                double ytarget = carea.AxisY.ValueLabels[0].NumericValue;

                //get the data point coordinates from the chart.
                ChartDataSeries cds = c1Chart1.ChartGroups[0].ChartData.SeriesList[0];
                PointF[] cdata = (PointF[])cds.PointData.CopyDataOut();

                //find the distance from each scatter point to the target point.
                int n = cdata.Length;
                double[] distances = (double[])Array.CreateInstance(typeof(double), n);
                for (int i = 0; i < n; i++)
                {
                    double dx = cdata[i].X - xtarget;
                    double dy = cdata[i].Y - ytarget;
                    distances[i] = Math.Sqrt(dx * dx + dy * dy);
                }

                //add the data to the Histogram chart series in ChartGroup(1).
                cds = c1Chart1.ChartGroups[1].ChartData.SeriesList[0];
                cds.Y.CopyDataIn(distances);

                //report the statistics of the distance data.
                lblStats.Text = "거리통계: " +
                    "  평균치: " + cds.Y.Statistics.Mean.ToString("0.000") +
                    "  중위수: " + cds.Y.Statistics.Median.ToString("0.000") +
                    "  표준편차: " + cds.Y.Statistics.StdDev.ToString("0.000");

                //set the overflow label.
                int overflow = (int)cds.Histogram.AboveIntervalCount;
                string msg = "";
                if (overflow > 0)
                {
			msg = "수량 > " + carea.AxisX.Max.ToString() + " = " + overflow.ToString();
                }
                c1Chart1.ChartLabels["overflow"].Text = msg;

여기까지 본문에서 금융 그래프와 수리통계 그래프를 설명했습니다. 이 그래프들은 사용자로 하여금 직관적으로 필요한 분야의 데이터 분석하여 신속하게 결정하도록 도와줍니다. 본문의 후반부에서는 등고선과 등고 구역 그래프 작성에 대해 설명하겠습니다.

본문(상)의 Demo소스코드는 다음과 같습니다. :


샘플 다운로드



한국 그레이프시티 공식카페에서 기술지원을 받으실 수 있습니다.
이메일을 통해서도 기술지원을 받으실 수 있습니다.