public static void DrawAnnotations(Chart chart1, int signalLength, bool addBeatType = true) { chart1.Annotations.Clear(); List <int> RPeaks = LoadRPeaksInds("R_Peaks.txt"); List <string> classifications = new List <string>(); if (addBeatType) { classifications = LoadClassifications("beats_Classes.txt"); } //MessageBox.Show(RPeaks.Count.ToString()); //MessageBox.Show(classifications.Count.ToString()); for (int i = 0; i < RPeaks.Count; i++) { if (RPeaks[i] >= signalLength) { break; } if (addBeatType) { TextAnnotation ann = new TextAnnotation(); ann.Text = classifications[i]; ann.SetAnchor(chart1.Series[0].Points[RPeaks[i]]); chart1.Annotations.Add(ann); } chart1.Series[0].Points[RPeaks[i]].MarkerStyle = MarkerStyle.Cross; chart1.Series[0].Points[RPeaks[i]].MarkerColor = Color.Red; } }
public static void DrawAnnotations(Chart chart1, int signalLength) { List <int> RPeaks = HelperMethods.LoadRPeaksInds("R_Peaks.txt"); List <string> classifications = HelperMethods.LoadClassifications("beats_Classes.txt"); MessageBox.Show(RPeaks.Count.ToString()); MessageBox.Show(classifications.Count.ToString()); for (int i = 0; i < RPeaks.Count; i++) { if (RPeaks[i] >= signalLength) { break; } TextAnnotation ann = new TextAnnotation(); ann.Text = classifications[i]; ann.SetAnchor(chart1.Series[0].Points[RPeaks[i]]); chart1.Annotations.Add(ann); chart1.Series[0].Points[RPeaks[i]].MarkerStyle = MarkerStyle.Cross; chart1.Series[0].Points[RPeaks[i]].MarkerColor = Color.Red; } }
public void OneCurveChart(int index, int dataNumPercent, int posPercent) { int i, j; // index; int flag; int interval; float f; float delta, tmpMax, tmpMin; DateTime dateTime; string xString; float maxV, minV, USL, LSL; int totalDataNumInBuffer; //total number of data need to be dislayed, only part of totalDataNumWanted because of the limitation of oneCurveScreenSize int initialDatPointNum; //initial point number for a curve initialDatPointNum = gVariable.minDataForOneScreen; maxV = gVariable.maxDataValue[index]; minV = gVariable.minDataValue[index]; // USL = gVariable.curveSTDValue[index] + gVariable.curveDeltaValue[index]; // LSL = gVariable.curveSTDValue[index] - gVariable.curveDeltaValue[index]; USL = gVariable.curveUpperLimit[index]; LSL = gVariable.curveLowerLimit[index]; totalDataNumInBuffer = mySQLClass.readAllDataToArrayByPercent(gVariable.currentCurveDatabaseName, index, dataNumPercent, posPercent); if (totalDataNumInBuffer < initialDatPointNum) { oneCurveScreenSize = initialDatPointNum; } else { oneCurveScreenSize = totalDataNumInBuffer; } chart1.ChartAreas[0].AxisX.ScaleView.Size = oneCurveScreenSize; try { // if (totalDataNumInBuffer > gVariable.totalPointNumForSChart) // { // getSPCValues(index, USL, LSL); // chart1.ChartAreas[0].AxisX.Title = "Cp: " + gVariable.cp[index].ToString("f4") + " Cpk: " + gVariable.cpk[index].ToString("f4") + " Ppk: " + gVariable.ppk[index].ToString("f4"); // } foreach (var series in chart1.Series) { series.Points.Clear(); } for (i = 0; i < totalDataNumInBuffer; i++) { j = gVariable.oneCurveIndexInPoint[i]; dateTime = toolClass.GetTime((gVariable.oneCurveTimeInPoint[i] - 3600 * 7).ToString()); xString = j + "\n" + dateTime.ToString("MM-dd HH:mm:ss"); f = gVariable.oneCurveDataInPoint[i]; chart1.Series[0].Points.AddXY(xString, f); if (f > maxV) { maxV = f; } if (f < minV) { minV = f; } } tmpMax = USL; tmpMin = LSL; if (maxV > USL) { tmpMax = maxV; } if (minV < LSL) { tmpMin = minV; } delta = tmpMax - tmpMin; tmpMax += delta / 7; tmpMin -= delta / 7; if (tmpMax == tmpMin) { tmpMax += 1; } chart1.ChartAreas[0].AxisY.Maximum = tmpMax; chart1.ChartAreas[0].AxisY.Minimum = tmpMin; StripLine sprUsl = new StripLine(); sprUsl.IntervalOffset = USL; sprUsl.BorderColor = Color.Blue; sprUsl.BorderDashStyle = ChartDashStyle.Dash; sprUsl.BorderWidth = 1; chart1.ChartAreas[0].AxisY.StripLines.Add(sprUsl); StripLine sprlsl = new StripLine(); sprlsl.IntervalOffset = LSL; sprlsl.BorderColor = Color.Blue; sprlsl.BorderDashStyle = ChartDashStyle.Dash; sprlsl.BorderWidth = 1; chart1.ChartAreas[0].AxisY.StripLines.Add(sprlsl); interval = totalDataNumInBuffer / 15; i = 0; flag = 0; chart1.Annotations.Clear(); foreach (var point in chart1.Series[0].Points) { float tmp = (float)point.YValues[0]; if (flag == 1 || tmp > USL || tmp < LSL) { point.Color = Color.Red; if (flag == 0) { flag = 1; } else { flag = 0; } } else { point.Color = Color.Green; } if (i == interval) { var annotation = new TextAnnotation { Text = point.YValues[0].ToString("F3") }; annotation.SetAnchor(point); annotation.AnchorY = point.YValues[0]; chart1.Annotations.Add(annotation); i = 0; } i++; } hScrollBar1.Minimum = 0; hScrollBar2.Minimum = 0; hScrollBar1.Maximum = 1009; hScrollBar2.Maximum = 1009; if (totalDataNumInBuffer < oneCurveScreenSize) { // if (totalDataNumInBuffer < oneCurveScreenSize * 2) hScrollBar1.Enabled = false; hScrollBar2.Enabled = false; } chart1.ChartAreas[0].AxisX.ScaleView.Position = 1; //we have put many points to chart by Points.AddXY(), then from which point we start our display } catch (Exception ex) { Console.Write("draw curve error" + ex); } }
private void CargarDatos() { try { if (_lbLoadFile) { DailyProcessing(); } DataTable datos = new DataTable(); string sMetaGlobal = string.Empty; string sRealGlobal = string.Empty; string sCumpTotal = string.Empty; chtBarras1.Series[0].Points.Clear(); chtBarras1.Palette = ChartColorPalette.SeaGreen; chtBarras1.Annotations.Clear(); chtPastel.Series[0].Points.Clear(); datos = ImportarDatos(_lsPlanta, _lsArea, _lsGlobal); if (datos.Rows.Count != 0) { if (string.IsNullOrEmpty(_lsHora)) { chtBarras1.Series[0].LegendText = _lsPlanta; } else { chtBarras1.Series[0].LegendText = _lsHora; } //chtBarras1.Series[0].Legend /* * chtBarras1.Palette = ChartColorPalette.SeaGreen; * chtBarras1.Annotations.Clear(); */ chtBarras1.ChartAreas["ChartArea1"].AxisX.Title = "HORA POR HORA"; chtBarras1.ChartAreas["ChartArea1"].AxisX.TitleFont = new Font("Calibri", 14, FontStyle.Bold); chtBarras1.ChartAreas["ChartArea1"].AxisY.Title = "PORCENTAJE DE PRODUCCION"; //chtBarras1.ChartAreas["ChartArea1"].AxisY.Maximum = 100; chtBarras1.ChartAreas["ChartArea1"].AxisY.TitleFont = new Font("Calibri", 14, FontStyle.Bold); double dMetaGlobal = 0; double dRealGlobal = 0; /////////////////////////////////////////////////// int cont = 0; for (int x = 0; x < datos.Rows.Count; x++) { int band = 0; for (int y = _rangoInicial; y <= _rangoFinal; y++) { string linea = ""; if (y < 10) { linea = "0" + y; } else { linea = y.ToString(); } if (datos.Rows[x][0].ToString().EndsWith(linea)) { band = 1; break; } } if (band == 0) { continue; } string sCump = datos.Rows[x][3].ToString().Trim(); double dCump = 0; if (!double.TryParse(sCump, out dCump)) { continue; } //BARRAS chtBarras1.Series[0].Points.AddXY(datos.Rows[x][0].ToString(), datos.Rows[x][3].ToString()); chtBarras1.Series[0].Points[cont].Label = sCump + "%"; chtBarras1.Series[0].Font = new Font("Arial Narrow", 12F, FontStyle.Bold); chtBarras1.ChartAreas[0].AxisX.LabelStyle.Font = new Font("Calibri", 14F, FontStyle.Bold); chtBarras1.ChartAreas[0].AxisX.LabelStyle.Interval = 1; chtBarras1.ChartAreas[0].AxisY.LabelStyle.Font = new Font("Caliri", 12F, FontStyle.Bold); //chtBarras1.ChartAreas[0].AxisX.LabelStyle.Angle = new AxisScrollBar TextAnnotation tA = new TextAnnotation(); tA.Font = new Font("Arial Narrow", 12F, FontStyle.Bold); double dPorcj = double.Parse(datos.Rows[x][2].ToString()); tA.Text = (String.Format("{0:0,0}", dPorcj)); tA.SetAnchor(chtBarras1.Series[0].Points[cont]); chtBarras1.Annotations.Add(tA); if (dCump > _ldPorcStd) { chtBarras1.Series[0].Points[cont].Color = Color.LightGreen; } else { chtBarras1.Series[0].Points[cont].Color = Color.PaleVioletRed; //chtBarras1.ChartAreas["ChartArea1"].AxisX.LabelStyle.ForeColor = Color.PaleVioletRed; //chtBarras1.ChartAreas[0].AxisX[x].LabelStyle.ForeColor = Color.PaleVioletRed; } chtBarras1.Series[0].SmartLabelStyle.Enabled = true; chtBarras1.ChartAreas["ChartArea1"].AxisX.MajorGrid.Enabled = false; chtBarras1.ChartAreas["ChartArea1"].AxisY.MajorGrid.Enabled = false; chtBarras1.ChartAreas["ChartArea1"].AxisX.IsLabelAutoFit = true; chtBarras1.ChartAreas["ChartArea1"].AxisX.LabelAutoFitStyle = LabelAutoFitStyles.LabelsAngleStep45; double dMeta = 0; double dReal = 0; if (double.TryParse(datos.Rows[x][1].ToString(), out dMeta)) { dMetaGlobal += dMeta; } if (double.TryParse(datos.Rows[x][2].ToString(), out dReal)) { dRealGlobal += dReal; } cont++; } /////////////////////////////////////////////////// sMetaGlobal = String.Format("{0:0,0}", dMetaGlobal); chtBarras1.Titles.Clear(); chtBarras1.Titles.Add("META: " + sMetaGlobal); chtBarras1.Titles[0].ForeColor = Color.White; chtBarras1.Titles[0].Font = new Font("Microsoft Sans Serif", 14F, FontStyle.Bold); //PASTEL chtPastel.Series[0].Points.Clear(); double dFalt = 0; double dCumpTotal = 0; dCumpTotal = dRealGlobal / dMetaGlobal; dCumpTotal = Math.Round(dCumpTotal, 2); dCumpTotal = dCumpTotal * 100; if (dRealGlobal < dMetaGlobal) { dFalt = dMetaGlobal - dRealGlobal; } else { dFalt = 0; } chtPastel.Series[0].Points.AddXY("REAL", dCumpTotal); chtPastel.Series[0].Points[0].Label = "REAL HORA X HORA" + Environment.NewLine + dCumpTotal.ToString() + "%" + Environment.NewLine + String.Format("{0:0,0}", dRealGlobal); chtPastel.Series[0].Points[0].LegendText = "REAL"; double dPorc = 0; if (dFalt > 0) { dPorc = dFalt / dMetaGlobal; dPorc = dPorc * 100; dPorc = Math.Round(dPorc, 2); } string sPorc = dPorc.ToString(); string sFalt = String.Format("{0:0,0}", dFalt); chtPastel.Series[0].Points.AddXY("FALTANTE", sPorc); chtPastel.Series[0].Points[1].Label = "FALTANTE" + Environment.NewLine + sPorc + "%" + Environment.NewLine + sFalt; chtPastel.Series[0].Points[1].LegendText = "FALTANTE"; if (dCumpTotal >= _ldPorcStd) { chtPastel.Series[0].Points[1].Color = Color.LightGreen; } else { chtPastel.Series[0].Points[1].Color = Color.OrangeRed; } chtPastel.Titles.Clear(); chtPastel.Titles.Add("META: " + sMetaGlobal); chtPastel.Titles[0].ForeColor = Color.White; chtPastel.Titles[0].Font = new Font("Microsoft Sans Serif", 14F, FontStyle.Bold); chtPastel.Series[0].SmartLabelStyle.Enabled = true; chtPastel.ChartAreas["ChartArea1"].AxisX.MajorGrid.Enabled = false; chtPastel.ChartAreas["ChartArea1"].AxisY.MajorGrid.Enabled = false; } else { chtBarras1.Series[0].Points.Clear(); //MessageBox.Show("No se encontro informacion para mostrar", "CloverCES Notification", MessageBoxButtons.OK, MessageBoxIcon.Information); //Close(); } } catch (Exception ex) { MessageBox.Show("Favor de Notificar al Administrador" + Environment.NewLine + "Dashboard" + Environment.NewLine + "LoadChart.." + ex.ToString(), "ERROR " + Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } }
public static void readPointDataToChart(int index, Chart chart) { int i, j, start, num; int flag; int interval; int startRecordIndex; int currentdataNumForCurve; string xString; float delta, UCL, LCL, tmpMax, tmpMin; DateTime dateTime; try { chart.Series[0].Color = Color.Green; i = 0; UCL = gVariable.curveUpperLimit[index]; LCL = gVariable.curveLowerLimit[index]; currentdataNumForCurve = gVariable.dataNumForCurve[index]; foreach (var series in chart.Series) { series.Points.Clear(); } //startRecordIndex is used as index displayed in x axis if (gVariable.dataNumForCurve[index] > gVariable.totalPointNumForNoSPCChart) { //We will read totalPointNumForNoSPCChart(125) pieces of data for SPC every time, the last numOfRecordsInChart(25) of data // will be used for curve display, so here we only get the last numOfRecordsInChart(25) of data startRecordIndex = gVariable.dataNumForCurve[index] - gVariable.totalPointNumForNoSPCChart; //start index in database start = gVariable.totalPointNumForNoSPCChart - gVariable.numOfRecordsInChart; //start index in dataInPint array num = gVariable.numOfRecordsInChart + start; //end point in curve } else if (gVariable.dataNumForCurve[index] > gVariable.numOfRecordsInChart) { startRecordIndex = 0; start = gVariable.dataNumForCurve[index] - gVariable.numOfRecordsInChart; num = gVariable.numOfRecordsInChart + start; //end point in curve } else //if (gVariable.dataNumForCurve[index] < numOfRecordsInChart) { startRecordIndex = 0; start = 0; num = gVariable.dataNumForCurve[index]; } if (num == 0) { xString = "1\n" + DateTime.Now.ToString("MM-dd HH:mm:ss"); chart.Series[0].Points.AddXY(xString, 0); gVariable.minDataValue[index] = 0; gVariable.maxDataValue[index] = 0; } else { for (i = start; i < num; i++) { dateTime = toolClass.GetTime((gVariable.timeInPoint[index, i] - 3600 * 7).ToString()); j = i + startRecordIndex; xString = j + "\n" + dateTime.ToString("MM-dd HH:mm:ss"); chart.Series[0].Points.AddXY(xString, gVariable.dataInPoint[index, i]); if (i == start) { gVariable.minDataValue[index] = gVariable.dataInPoint[index, 0]; gVariable.maxDataValue[index] = gVariable.dataInPoint[index, 0]; } else { if (gVariable.dataInPoint[index, i] > gVariable.maxDataValue[index]) { gVariable.maxDataValue[index] = gVariable.dataInPoint[index, i]; } if (gVariable.dataInPoint[index, i] < gVariable.minDataValue[index]) { gVariable.minDataValue[index] = gVariable.dataInPoint[index, i]; } } } } if (UCL == 0 && LCL == 0) { tmpMax = 1; tmpMin = 0; } else { tmpMax = UCL; tmpMin = LCL; } if (gVariable.maxDataValue[index] > UCL) { tmpMax = gVariable.maxDataValue[index]; } if (gVariable.minDataValue[index] < LCL) { tmpMin = gVariable.minDataValue[index]; } delta = tmpMax - tmpMin; tmpMax += delta / 7; // if (tmpMin >= 0) // tmpMin = 0; // else tmpMin -= delta / 7; if (tmpMax == tmpMin) { tmpMax += 1; } chart.ChartAreas[0].AxisY.Maximum = tmpMax; chart.ChartAreas[0].AxisY.Minimum = tmpMin; chart.Annotations.Clear(); flag = 0; interval = 5; i = 0; foreach (DataPoint point in chart.Series[0].Points) //遍历数据点 { float tmp = (float)point.YValues[0]; if (flag == 1 || tmp > UCL || tmp < LCL) { point.Color = Color.Red; if (flag == 0) { flag = 1; } else { flag = 0; } } else { point.Color = Color.Green; } if (i == interval) { var annotation = new TextAnnotation { Text = point.YValues[0].ToString("F3") }; annotation.SetAnchor(point); annotation.AnchorY = point.YValues[0]; chart.Annotations.Add(annotation); i = 0; } i++; } if (UCL != 0 || LCL != 0) //for beat data, since there is no limit value, no SPC { if (gVariable.dataNumForCurve[index] > gVariable.totalPointNumForNoSPCChart) //范本太少则不作SPC计算 { getSPCValues(index, UCL, LCL); chart.ChartAreas[0].AxisX.Title = "Cp:" + cp[index].ToString("f3") + " Cpk:" + cpk[index].ToString("f3") + " Ppk:" + ppk[index].ToString("f3"); } else { chart.ChartAreas[0].AxisX.Title = "Cp: Cpk: Ppk: "; } } } catch (Exception ex) { Console.Write("draw curve error :" + ex); } }