/// <summary>
        /// 서브 차트 데이터 바인딩
        /// </summary>
        /// <param name="ds"></param>
        private void UpdateOpeningChart(DataSet ds, string opening, string materials)
        {
            uiChart_Histogram.Titles.Clear();

            if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0)
            {
                return;
            }

            int nPoints = 0;

            double minY = double.MaxValue;
            double maxY = double.MinValue;

            int col = uiChk_GapValue.Checked ? 6 : 5;

            for (int row = 0; row < ds.Tables[0].Rows.Count; ++row)
            {
                double val = 0;
                nPoints = uiChart_Histogram.Data.Points++;

                if (double.TryParse(ds.Tables[0].Rows[row][col].ToString(), out val) == true)
                {
                    uiChart_Histogram.Data[0, nPoints] = val;

                    maxY = Math.Max(maxY, val);
                    minY = Math.Min(minY, val);
                }
            }

            //Histogram
            uiChart_Histogram.Extensions.Clear();
            ChartFX.WinForms.Statistical.Statistics st = new ChartFX.WinForms.Statistical.Statistics();
            st.Chart = uiChart_Histogram;
            uiChart_Histogram.GalleryAttributes = st.Gallery.Histogram;

            //chart1.DataGrid.TextColorData = Color.Blue;

            uiChart_Histogram.ToolTipFormat = "%L\nPoint Value : %v";

            //null 값 처리 되어 입력 된 값이 없을 경우...
            if (uiChart_Histogram.Data.Series == 0)
            {
                return;
            }

            double range = (maxY + 25) - (minY - 25);

            st.Gallery.Histogram.AxisX.Step = range / 10;

            //차트 막대바 두께 설정
            st.Chart.AllSeries.Volume = 90;

            //차트 X축 라벨 기울기 각도 설정
            st.Gallery.Histogram.AxisX.LabelAngle = 0;

            st.Gallery.Histogram.DataMax = (double)(maxY + 25);
            st.Gallery.Histogram.DataMin = (double)(minY - 25);
            st.Gallery.Histogram.AxisX.LabelsFormat.Decimals = 1;

            st.Studies.Clear();
            st.Studies.AddTitle("\n\n");
            st.Studies.Add(AnalysisMulti.SampleSize);
            st.Studies.Add(Analysis.LowerQuartile);
            st.Studies.Add(Analysis.UpperQuartile);
            st.Studies.Add(Analysis.Mean);
            st.Studies.Add(Analysis.Lsl);
            st.Studies.Add(Analysis.Usl);
            st.Studies.Add(Analysis.Cp);
            st.Studies.Add(Analysis.Cpk);

            for (int i = 0; i < st.Studies.Count; ++i)
            {
                st.Studies[i].Decimals = 2;
            }

            st.Studies[1].Text = "Total Size";
            st.Studies[2].Text = "25%(L)";
            st.Studies[3].Text = "25%(U)";

            st.Calculators[0].Lsl = minY;
            st.Calculators[0].Usl = maxY;

            st.LegendBox.Visible  = true;
            st.LegendBox.Dock     = ChartFX.WinForms.DockArea.Right;
            st.LegendBox.AutoSize = false;
            st.LegendBox.Width    = 135;
            st.LegendBox.Height   = 300;

            st.Gallery.Histogram.ShowLimits = true;

            uiChart_Histogram.Series[0].Text = "Width";

            st.LegendBox.Visible = true;

            //차트 Title 설정
            TitleDockable td = new TitleDockable();

            td.Font      = new Font("Arial", 11, FontStyle.Bold);
            td.TextColor = Color.DarkBlue;
            td.Text      = $"'{materials}'_'{opening}' - Capability Analysis";
            uiChart_Histogram.Titles.Add(td);
        }
Beispiel #2
0
        /// <summary>
        /// Opening 차트 데이터 바인딩
        /// </summary>
        /// <param name="ds"></param>
        private void UpdateOpeningChart(DataSet ds, string opening, string materials)
        {
            uiChart_XBar.Titles.Clear();

            if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0)
            {
                return;
            }

            double avg = Math.Ceiling(Math.Round(count / Convert.ToDouble(opt.TOPN), 2));

            uiChart_XBar.Data.Series = avg > Convert.ToInt32(opt.TOPN) ? Convert.ToInt32(opt.TOPN) : Convert.ToInt32(avg);

            int nPoints = 0;

            double minY = double.MaxValue;
            double maxY = double.MinValue;

            int           col        = uiChk_GapValue.Checked ? 7 : 6;
            int           k          = 0;
            List <double> resultList = new List <double>();
            List <double> avgList    = new List <double>();

            for (int idx = 0; idx < uiChart_XBar.Data.Series; idx++)
            {
                resultList.Clear();

                for (int row = 0; row < ds.Tables[0].Rows.Count; ++row)
                {
                    if ((uiChart_XBar.Data.Series != 1 && row != 0 && row % uiChart_XBar.Data.Series == 0) ||
                        k == ds.Tables[0].Rows.Count)
                    {
                        break;
                    }

                    nPoints = 0;
                    double val = 0;

                    nPoints = uiChart_XBar.Data.Points++;

                    string date = ds.Tables[0].Rows[k][1].ToString();
                    uiChart_XBar.Series[idx].Text = date.Substring(date.Length - 6, 6).ToString();
                    uiChart_XBar.AxisX.LabelAngle = 45;

                    if (double.TryParse(ds.Tables[0].Rows[k][col].ToString(), out val) == true)
                    {
                        uiChart_XBar.Data[idx, nPoints] = val;

                        resultList.Add(val);

                        maxY = Math.Max(maxY, val);
                        minY = Math.Min(minY, val);
                    }
                    k++;
                }

                double avgValue = resultList.Average();
                avgList.Add(Math.Round(avgValue, 2));
            }

            double minValue = 0.0;
            double maxValue = 0.0;
            double gap      = 0.0;

            if (uiChart_XBar.Data.Series == 1)
            {
                minValue = resultList.Min();
                maxValue = resultList.Max();
                gap      = Math.Round(maxValue - minValue, 2);
            }
            else
            {
                minValue = avgList.Min();
                maxValue = avgList.Max();
                gap      = Math.Round(maxValue - minValue, 2);
            }

            // X Chart
            uiChart_XBar.Extensions.Clear();
            ChartFX.WinForms.Statistical.Statistics st = new ChartFX.WinForms.Statistical.Statistics();
            st.Chart = uiChart_XBar;
            uiChart_XBar.GalleryAttributes = st.Gallery.XChart;

            st.Studies.Add(StudyGroup.Spc);

            if (gap < 5)
            {
                uiChart_XBar.AxisY.Min = minValue - gap;
                uiChart_XBar.AxisY.Max = maxValue + gap;
                uiChart_XBar.AxisY.LabelsFormat.Decimals = 1;
            }
            else
            {
                uiChart_XBar.AxisY.Min = minValue - (gap / 5);
                uiChart_XBar.AxisY.Max = maxValue + (gap / 5);
                uiChart_XBar.AxisY.LabelsFormat.Decimals = 1;
            }

            //차트 Title 설정
            TitleDockable td = new TitleDockable();

            td.Font      = new Font("Arial", 11, FontStyle.Bold);
            td.TextColor = Color.DarkBlue;
            td.Text      = $"'{materials}'_'{opening}' - X̄ (X bar) Chart";
            uiChart_XBar.Titles.Add(td);
        }