/// <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); }
/// <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); }