private void DrawGraph() { // Получим панель для рисования GraphPane pane = zedGraph.GraphPane; // Очистим список кривых на тот случай, если до этого сигналы уже были нарисованы pane.CurveList.Clear(); // Списки точек для трех графиков PointPairList list1 = new PointPairList(); PointPairList list2 = new PointPairList(); PointPairList list3 = new PointPairList(); double xmin = -50; double xmax = 50; // Заполняем списки точек for (double x = xmin; x <= xmax; x += 0.01) { list1.Add(x, f1(x)); list2.Add(x, f2(x)); list3.Add(x, f3(x)); } // Удалим существующие оси Y pane.YAxisList.Clear(); // Создадим три новых оси Y // Метод AddYAxis() возвращает индекс новой оси в списке осей (YAxisList) int axis1 = pane.AddYAxis("Axis 1"); int axis2 = pane.AddYAxis("Axis 2"); int axis3 = pane.AddYAxis("Axis 3"); // Создадим три кривые LineItem myCurve1 = pane.AddCurve("Curve 1", list1, Color.Blue, SymbolType.None); LineItem myCurve2 = pane.AddCurve("Curve 2", list2, Color.Black, SymbolType.None); LineItem myCurve3 = pane.AddCurve("Curve 3", list3, Color.Red, SymbolType.None); // Для каждой кривой установим свои оси myCurve1.YAxisIndex = axis1; myCurve2.YAxisIndex = axis2; myCurve3.YAxisIndex = axis3; // Для наглядности раскрасим надписи на оси Y в цвета графика, // который рисуется с этой осью pane.YAxisList[axis1].Title.FontSpec.FontColor = Color.Blue; pane.YAxisList[axis2].Title.FontSpec.FontColor = Color.Black; pane.YAxisList[axis3].Title.FontSpec.FontColor = Color.Red; // Вызываем метод AxisChange (), чтобы обновить данные об осях. // В противном случае на рисунке будет показана только часть графика, // которая умещается в интервалы по осям, установленные по умолчанию zedGraph.AxisChange(); // Обновляем график zedGraph.Invalidate(); }
public void DrawGraph(List <XDate> x, List <double> y, string name, Color color) { GraphPane pane = control.GraphPane; PointPairList list1 = new PointPairList(); for (int i = 0; i < x.Count; i++) { var point = new PointPair() { X = x[i], Y = y[i] }; list1.Add(point); } int yAxis = pane.AddYAxis(name); LineItem myCurve = pane.AddCurve(name, list1, color, SymbolType.None); myCurve.YAxisIndex = yAxis; myCurve.Line.Width = 1.0F; myCurve.Line.StepType = StepType.ForwardStep; pane.XAxis.Scale.Min = x.First(); pane.XAxis.Scale.Max = x.Last(); pane.YAxisList[yAxis].Scale.Min = 0; pane.YAxisList[yAxis].MajorGrid.IsVisible = true; pane.YAxisList[yAxis].MajorGrid.DashOn = 10; pane.YAxisList[yAxis].MajorGrid.DashOff = 5; pane.YAxisList[yAxis].MajorGrid.Color = Color.LightGray; pane.YAxisList[yAxis].MajorGrid.IsZeroLine = false; pane.YAxisList[yAxis].IsVisible = false; control.GraphPane.Title.IsVisible = false; control.GraphPane.Legend.IsVisible = false; }
/// <summary> /// Построить график сатурации /// </summary> /// <param name="Saturation_t"></param> /// <param name="Saturation_y1"></param> /// <param name="Saturation_y2"></param> /// <param name="ew"></param> public void Make_Graph_Saturation(double[] Saturation_t, double[] Saturation_y1, double[] Saturation_y2, int ew) { PointPairList f_saturation = new PointPairList(); // PointPairList f_saturation2 = new PointPairList(); for (int y = 3; y < ew - 1; y++) { f_saturation.Add(Saturation_t[y], Saturation_y1[y] * 100); // f_saturation2.Add(Saturation_t[y], Saturation_y2[y] * 100); } int axis2 = pane.AddYAxis("Степень оксигенации, %"); LineItem f_satur = pane.AddCurve("Степень оксигенации %", f_saturation, Color.DarkGoldenrod, SymbolType.Circle); // LineItem f_satur2 = pane.AddCurve("Степень оксигенации %", f_saturation2, Color.Green, SymbolType.Diamond); f_satur.YAxisIndex = axis2; f_satur.Symbol.Fill.Type = FillType.Solid; f_satur.Symbol.Size = 8; // f_satur2.Symbol.Fill.Type = FillType.Solid; // f_satur2.Symbol.Size = 8; // pane.YAxisList[axis2].Title.FontSpec.FontColor = Color.Black; pane.YAxis.MajorGrid.IsZeroLine = false; }
public void DrawGraph(double[] ArrayArray, double[] ArrayArray2, bool isAxisAdded) { int i = 0; GraphPane Pane = zedGraph.GraphPane; Pane.CurveList.Clear(); int axis2; axis2 = Pane.AddYAxis("Ось графика Х"); PointPairList PairList1 = new PointPairList(); PointPairList PairList2 = new PointPairList(); double xmin = 0; double xmax = 3; for (double x = xmin; x <= xmax; x += 0.01) { PairList1.Add(x, ArrayArray[Convert.ToInt32(100 * x)]); PairList2.Add(x, ArrayArray2[Convert.ToInt32(100 * x)]); } i++; LineItem myCurve = Pane.AddCurve("Factor = 0.2", PairList1, Color.Black, SymbolType.None); LineItem myCurve_2 = Pane.AddCurve("Factor = 0.5", PairList2, Color.Blue, SymbolType.None); if (!isAxisAdded) { Pane.YAxisList[axis2].IsVisible = true; } else { Pane.YAxisList[axis2].IsVisible = false; } zedGraph.AxisChange(); zedGraph.Refresh(); }
private void GetCoordinates(string[] lines, int rows, int cols) { GraphPane pane = zedGraphControl1.GraphPane; // Очистим список кривых на тот случай, если до этого сигналы уже были нарисованы pane.CurveList.Clear(); List <PointPairList> lists = new List <PointPairList>(); List <LineItem> myCurves = new List <LineItem>(); for (int j = 1; j < cols; ++j) // создание Y-кривых { lists.Add(new PointPairList()); } // заполняем список точек for (int i = 0; i < rows; ++i) { string thisline = lines[i]; string[] values = thisline.Split(';'); if (values.Count() != cols) { throw new FileLoadException(String.Format("Data line {0} has {1} items instead of {2}", i + 1, values.Count(), cols)); } double depth = double.Parse(values[0], CultureInfo.InvariantCulture);// Глубина текущей строки for (int j = 1; j < cols; ++j) { double y = double.Parse(values[j], CultureInfo.InvariantCulture); lists[j - 1].Add(depth, y); } } pane.YAxisList.Clear(); // Удалим существующие оси Y int[] axis = new int[cols - 1]; for (int j = 0; j < cols - 1; ++j) // Создадим N новых оси Y { axis[j] = pane.AddYAxis("Curve " + (j + 1)); myCurves.Add(pane.AddCurve("Curve " + (j + 1), lists[j], ColorTranslator.FromHtml(ColourValues[j]), SymbolType.None)); myCurves[j].YAxisIndex = axis[j]; pane.YAxisList[axis[j]].Title.FontSpec.FontColor = ColorTranslator.FromHtml(ColourValues[j]); pane.YAxisList[axis[j]].MajorGrid.IsZeroLine = false; } pane.Legend.IsVisible = false; pane.Title.IsVisible = false; zedGraphControl1.AxisChange(); zedGraphControl1.Invalidate(); CurveNum_tb.Enabled = true; DotCount_tb.Enabled = true; }
public GraphPane plotPieChart(ZedGraphControl zgc, HRMObjectClass hrmObject) { GraphPane pane = zgc.GraphPane; clearPane(pane); pane.AddYAxis(""); pane.Title.Text = "Power Balance"; // Left Right Balance % distribution PieItem segment1 = pane.AddPieSlice(hrmObject.calcAvg(), Color.LightBlue, 0F, "Left Leg"); PieItem segment2 = pane.AddPieSlice(100 - hrmObject.calcAvg(), Color.LightGreen, 0F, "Right Leg"); // Segment Label Type (Name and %) segment1.LabelType = PieLabelType.Percent; segment2.LabelType = PieLabelType.Percent; ZGraphControl(zgc); return(pane); }
public void DrawGraph(double[,] ArrayArray1, double[,] ArrayArray2, int LineNumber, bool isAxisAdded) { int i = 0; GraphPane Pane = zedGraph.GraphPane; Pane.CurveList.Clear(); int axis2; axis2 = Pane.AddYAxis("Ось графика Х"); PointPairList PairList = new PointPairList(); PointPairList PairList_2 = new PointPairList(); double xmin = 0; double xmax = 49; for (double x = xmin; x <= xmax; x += 0.01) { PairList.Add(x, ArrayArray1[LineNumber, Convert.ToInt32(100 * x)]); PairList_2.Add(x, ArrayArray2[LineNumber, Convert.ToInt32(100 * x)]); } i++; LineItem myCurve = Pane.AddCurve("Y1", PairList, Color.Black, SymbolType.None); LineItem myCurve_2 = Pane.AddCurve("X", PairList_2, Color.Blue, SymbolType.None); myCurve_2.YAxisIndex = axis2; Pane.YAxis.IsVisible = false; Pane.YAxisList[axis2].Title.FontSpec.FontColor = Color.Blue; if (!isAxisAdded) { Pane.YAxisList[axis2].IsVisible = true; } else { Pane.YAxisList[axis2].IsVisible = false; } zedGraph.AxisChange(); zedGraph.Refresh(); }
public void Redraw() { if (GraphControl == null) { return; } GraphControl.GraphPane.CurveList.Clear(); GraphPane pane = GraphControl.GraphPane; pane.YAxisList.Clear(); if (Graphs.Count == 0) { pane.XAxis.Title.Text = ""; return; } var yAxises = new Dictionary <string, int>(); for (int k = 0; k < Graphs.Count; k++) { Graph graph = Graphs[k]; LineItem line = k < GraphSettings.CurveLines.Count ? graph.GetLineItem(GraphSettings.CurveLines[k].LineColor, SymbolType.None, 2.0f) : graph.GetLineItem(); if (GraphSettings.Smooth) { var curList = (IPointList)line.Points.Clone(); var average = new MovingAverage(GraphSettings.SmoothPeriod); switch (GraphSettings.SmoothType) { case SmoothModel.Average: for (int i = 0; i < curList.Count; i++) { average.Push(curList[i].Y); curList[i].Y = average.Average; } break; case SmoothModel.Median: for (int i = 0; i < curList.Count; i++) { average.Push(curList[i].Y); curList[i].Y = average.Median; } break; default: break; } line.Points = curList; } var yAxisLabel = graph.YAxis + (string.IsNullOrEmpty(graph.Y_Unit) ? "" : (", " + graph.Y_Unit)); if (!yAxises.ContainsKey(yAxisLabel)) { yAxises.Add(yAxisLabel, pane.AddYAxis(yAxisLabel)); } line.YAxisIndex = yAxises[yAxisLabel]; pane.CurveList.Add(line); } pane.XAxis.Title.Text = Graphs.Last().XAxis + (string.IsNullOrEmpty(Graphs.Last().X_Unit) ? "" : (", " + Graphs.Last().X_Unit)); pane.Title.Text = ""; GraphControl.AxisChange(); LegendRedraw(GraphSettings.LegendVisible); AxisTitleRedraw(GraphSettings.AxisLabelVisible); #region AxisGrids pane.XAxis.MajorGrid.IsVisible = GraphSettings.MajorGrid; pane.YAxis.MajorGrid.IsVisible = GraphSettings.MajorGrid; pane.XAxis.MinorGrid.IsVisible = GraphSettings.MinorGrid; pane.YAxis.MinorGrid.IsVisible = GraphSettings.MinorGrid; pane.YAxis.MajorGrid.DashOn = 10; pane.YAxis.MajorGrid.DashOff = 5; pane.XAxis.MajorGrid.DashOn = 10; pane.XAxis.MajorGrid.DashOff = 5; pane.YAxis.MajorGrid.DashOn = 10; pane.YAxis.MajorGrid.DashOff = 5; pane.XAxis.MinorGrid.DashOn = 1; pane.XAxis.MinorGrid.DashOff = 2; pane.YAxis.MinorGrid.DashOn = 1; pane.YAxis.MinorGrid.DashOff = 2; #endregion DashOnOff GraphControl.Invalidate(); GraphControl.Refresh(); }
/// <summary> /// Draws the Graph /// </summary> private void drawGraph() { // Displaying heart rate in yaxis in red color var YAxis = myPane.AddYAxis("Heart Rate"); myPane.YAxis.Color = System.Drawing.Color.Red; myPane.YAxis.Scale.Max = int.Parse(MaxHR); // Displaying speed in yaxis in green color var Y2Axis = myPane.AddYAxis("Speed"); myPane.Y2Axis.Color = System.Drawing.Color.Green; myPane.Y2Axis.Scale.Max = speedRateMax; // Displaying cadence in yaxis in blue color var Y3Axis = myPane.AddYAxis("Cadence"); myPane.YAxisList[Y3Axis].Color = System.Drawing.Color.Blue; //myPane.YAxisList[Y3Axis].Scale.Max = int.Parse(lbl.Text); // Displaying altitude in yaxis gray color var Y4Axis = myPane.AddYAxis("Altitude"); myPane.YAxisList[Y4Axis].Color = System.Drawing.Color.Gray; // Displaying power in yaxis in magenta color var Y5Axis = myPane.AddYAxis("Power"); myPane.YAxisList[Y5Axis].Color = System.Drawing.Color.Magenta; // Setting starttime and end time DateTime startDate = myDateTime1; startDate = Convert.ToDateTime(StartTime); DateTime endDate = startDate.AddSeconds(seconds * metroGrid1.Rows.Count); // Console.WriteLine("startDate"); // Console.WriteLine(startDate); // Console.WriteLine(metroGrid1.Rows.Count); // Console.WriteLine("endDate"); // Console.WriteLine(endDate); /* * //Console.WriteLine("Checking MetroGrid Working?"); * //Console.WriteLine(metroGrid1.Rows.Count); */ // Setting min scale of xaxis to starttime and max scale to endtime myPane.XAxis.Scale.Min = new XDate(startDate); myPane.XAxis.Scale.Max = new XDate(endDate); myPane.XAxis.Scale.MinorUnit = DateUnit.Second; myPane.XAxis.Scale.MajorUnit = DateUnit.Minute; // Scroll min to start time and scroll max to endtime zedGraphControl1.ScrollMinX = new XDate(startDate); zedGraphControl1.ScrollMaxX = new XDate(endDate); myPane.XAxis.Type = AxisType.Date; myPane.XAxis.Scale.Format = "HH:mm:ss"; myPane.XAxis.MinorGrid.IsVisible = true; myPane.XAxis.MajorGrid.IsVisible = true; double xCoord = 0; // Point pair list for graph hrList = new PointPairList(); speedList = new PointPairList(); cadenceList = new PointPairList(); altitudeList = new PointPairList(); powerList = new PointPairList(); int dataCount = (metroGrid1.Rows.Count - 1); int counter = 0; // Graph setup for version to 106 and 107 if (Version == "106" || Version == "107") { foreach (DataGridViewRow rowData in metroGrid1.Rows) { if (counter == dataCount) { break; } // Adding interval as seconds xCoord = (double)new XDate(startDate.AddSeconds(seconds * counter)); //Console.WriteLine("rowData[1].Value.ToString"); //Console.WriteLine(rowData.Cells[1].Value.ToString()); hrList.Add(xCoord, double.Parse(rowData.Cells[1].Value.ToString())); // Ploting graph according to smode when bits value is 1 if (SMode0 == "1") { // Ploting graph value of speed speedList.Add(xCoord, double.Parse(rowData.Cells[2].Value.ToString())); } if (SMode1 == "1") { // Ploting graph value of cadence cadenceList.Add(xCoord, double.Parse(rowData.Cells[3].Value.ToString())); } if (SMode2 == "1") { Console.WriteLine("Debug Here"); Console.WriteLine(rowData.Cells[4].Value.ToString()); // Ploting graph value of altitude altitudeList.Add(xCoord, double.Parse(rowData.Cells[4].Value.ToString())); } if (SMode3 == "1") { // Ploting graph value of power powerList.Add(xCoord, double.Parse(rowData.Cells[5].Value.ToString())); } counter++; } Console.WriteLine("Checking Actual Data Here"); Console.WriteLine(hrList); Console.WriteLine(speedList); Console.WriteLine(cadenceList); Console.WriteLine(altitudeList); Console.WriteLine(powerList); // Setting each graph title, color and symbol hrCurve = myPane.AddCurve("Heart Rate", hrList, System.Drawing.Color.Red, SymbolType.None); if (SMode0 == "1") { // Setting speed as graph title, color as blue and symbol as none speedCurve = myPane.AddCurve("Speed", speedList, System.Drawing.Color.Blue, SymbolType.None); speedCurve.YAxisIndex = Y2Axis; } if (SMode1 == "1") { // Setting cadence as graph title, color as green and symbol as none cadenceCurve = myPane.AddCurve("Cadence", cadenceList, System.Drawing.Color.Green, SymbolType.None); cadenceCurve.YAxisIndex = Y3Axis; } if (SMode2 == "1") { // Setting altitude as graph title, color as yellow and symbol as none altitudeCurve = myPane.AddCurve("Altitude", altitudeList, System.Drawing.Color.Yellow, SymbolType.None); altitudeCurve.YAxisIndex = Y4Axis; } if (SMode3 == "1") { // Setting power as graph title, color as purple and symbol as none powerCurve = myPane.AddCurve("Power Watt", powerList, System.Drawing.Color.Purple, SymbolType.None); powerCurve.YAxisIndex = Y5Axis; } hrCurve.YAxisIndex = YAxis; // Refreshing graph zedGraphControl1.AxisChange(); zedGraphControl1.Invalidate(); } // Setting up graph for version 105 else if (Version == "105") { foreach (DataGridViewRow rowData in metroGrid1.Rows) { if (counter == dataCount) { break; } hrList.Add(xCoord, double.Parse(rowData.Cells[1].Value.ToString())); speedList.Add(xCoord, double.Parse(rowData.Cells[2].Value.ToString())); // cadenceList.Add(xCoord, double.Parse(rowData.Cells[3].Value.ToString())); /* * lblMaxPower.Text = "0 Watts"; * lblMaxAltitude.Text = "0 Meter"; */ counter++; } hrCurve = myPane.AddCurve("Heart Rate", hrList, System.Drawing.Color.Red, SymbolType.None); speedCurve = myPane.AddCurve("Speed", speedList, System.Drawing.Color.Blue, SymbolType.None); cadenceCurve = myPane.AddCurve("Cadence", cadenceList, System.Drawing.Color.Green, SymbolType.None); hrCurve.YAxisIndex = YAxis; speedCurve.YAxisIndex = Y2Axis; cadenceCurve.YAxisIndex = Y3Axis; zedGraphControl1.AxisChange(); zedGraphControl1.Invalidate(); } } // Draw Graph
private void zedGraph() { GraphPane graphValue = zedGraphControl1.GraphPane; graphValue.CurveList.Clear(); graphValue.GraphObjList.Clear(); graphValue.YAxisList.Clear(); // Set the Titles graphValue.Title.Text = "Data Analysis Software"; graphValue.XAxis.Title.Text = "Time (HH:mm:ss)"; graphValue.AddYAxis("Heart Rate"); graphValue.AddYAxis("Speed"); graphValue.AddYAxis("Altitude"); graphValue.AddYAxis("Power"); graphValue.AddYAxis("Cadence"); // Heart Rate Y AXIS graphValue.YAxisList[0].Scale.Min = minHeartRate; graphValue.YAxisList[0].Scale.Max = maxHeartRate; // Speed Y AXIS graphValue.YAxisList[1].Scale.Min = 0; graphValue.YAxisList[1].Scale.Max = maxSpeed; // Altitude Y AXIS graphValue.YAxisList[2].Scale.Min = 0; graphValue.YAxisList[2].Scale.Max = maxAltitude; // Power Y AXIS graphValue.YAxisList[3].Scale.Min = 0; graphValue.YAxisList[3].Scale.Max = maxPower; // Cadence Y AXIS graphValue.YAxisList[4].Scale.Min = 0; graphValue.YAxisList[4].Scale.Max = 5000; graphValue.Title.FontSpec.FontColor = Color.Crimson; // Add gridlines to the plot, and make them gray double x, y1, y2, y3, y4, y5; // Move the legend location graphValue.Legend.Position = ZedGraph.LegendPos.Top; PointPairList teamAPairList = new PointPairList(); PointPairList teamBPairList = new PointPairList(); PointPairList teamCPairList = new PointPairList(); PointPairList teamDPairList = new PointPairList(); PointPairList teamEPairList = new PointPairList(); graphValue.XAxis.Type = AxisType.Date; graphValue.XAxis.Scale.Format = "HH:mm:ss"; graphValue.XAxis.Scale.Min = 0; graphValue.XAxis.Scale.Max = endTime.TotalSeconds - startTime.TotalSeconds; graphValue.XAxis.Scale.MinorUnit = DateUnit.Second; graphValue.XAxis.Scale.MajorUnit = DateUnit.Minute; double[] heartRate = graphHeartRate; double[] speed = graphSpeed; double[] cadence = graphCadence; double[] altitude = graphAltitude; double[] power = graphPower; for (int i = 0; i < heartRate.Length; i++) { teamAPairList.Add(i, heartRate[i]); } for (int i = 0; i < speed.Length; i++) { teamBPairList.Add(i, speed[i]); } for (int i = 0; i < cadence.Length; i++) { teamCPairList.Add(i, cadence[i]); } for (int i = 0; i < power.Length; i++) { teamDPairList.Add(i, power[i]); } for (int i = 0; i < altitude.Length; i++) { teamEPairList.Add(i, altitude[i]); } // Heart Rate teamACurve = graphValue.AddCurve("Heart Rate", teamAPairList, Color.Red, SymbolType.None); // Speed teamBCurve = graphValue.AddCurve("Speed ", teamBPairList, Color.Blue, SymbolType.None); // Power teamCCurve = graphValue.AddCurve("Power", teamCPairList, Color.Green, SymbolType.None); // Cadence teamDCurve = graphValue.AddCurve("Cadence", teamDPairList, Color.Yellow, SymbolType.None); // Altitude teamECurve = graphValue.AddCurve("Altitude ", teamEPairList, Color.Orange, SymbolType.None); axisChangeZedGraph(zedGraphControl1); SetSize(); // end }
public void readData(string fn, GraphPane graph) { SqlConnection con = DBSettings.getConnection(); con.Open(); Int64 timeStart = EPADB.GetIntDate(DateStart); Int64 timeEnd = EPADB.GetIntDate(DateEnd); Dictionary <Int64, Dictionary <string, double> > Data = new Dictionary <long, Dictionary <string, double> >(); Int64 time = timeStart; while (time <= timeEnd) { Data.Add(time, new Dictionary <string, double>()); foreach (SignalInfo si in epa.SelectedAnalogSignals) { Data[time].Add(si.KKS, double.NaN); } time += Step; } List <string> kksQList = new List <string>(); List <int> numSignQList = new List <int>(); List <int> timesQList = new List <int>(); Dictionary <int, int> timesDict = new Dictionary <int, int>(); List <int> timesList = new List <int>(); foreach (int ss in SignalsBySubSys.Keys) { foreach (string table in tables) { if (subSystemsByTables[table] != ss) { continue; } Status.Text = "Обработка таблицы " + table; SqlCommand com = con.CreateCommand(); com.CommandText = String.Format("Select * from {0} where time_page>={1} and time_page<={2}", table.Replace("state", "time"), timeStart, timeEnd); List <Int32> times = new List <int>(); try { Status.Text += "---|"; SqlDataReader reader = com.ExecuteReader(); while (reader.Read()) { try { int tm = reader.GetInt32(0); times.Add(tm); } catch { } } times.Sort(); reader.Close(); foreach (SignalInfo si in SignalsBySubSys[ss]) { kksQList.Add("'" + si.KKS + "'"); numSignQList.Add(si.numSign); if (kksQList.Count() <= 10 && si != SignalsBySubSys[ss].Last()) { continue; } string kksQ = String.Join(",", kksQList); string numQ = String.Join(",", numSignQList); kksQList.Clear(); timesDict.Clear(); numSignQList.Clear(); timesQList.Clear(); foreach (int t in Data.Keys) { if (t >= times.First() && t <= times.Last()) { int valT = times.First(tempT => { return(tempT >= t); }); if (valT - t < Step) { timesQList.Add(valT); timesDict.Add(valT, t); } } if (timesQList.Count < 100 && t != Data.Keys.Last()) { continue; } string timesQ = String.Join(",", timesQList); timesQList.Clear(); try { com = con.CreateCommand(); //com.CommandText = String.Format("Select kks_id_signal,time_page,data from {0} where time_page in ({2}) and kks_id_signal in ({1})", table, kksQ, timesQ); //com.CommandText = String.Format("Select kks_id_signal,time_page,data from {0} where time_page={2} and kks_id_signal = '{1}'", table, kks, valT); if (!epa.UseNumSignals) { com.CommandText = String.Format("Select kks_id_signal,time_page,data from {0} where time_page in ({2}) and kks_id_signal in ({1})", table, kksQ, timesQ); } else { com.CommandText = String.Format("Select kks_id_signal,time_page,data from {0} where time_page in ({2}) and num_sign in ({1})", table, numQ, timesQ); } Status.Text += "---|"; reader = com.ExecuteReader(); while (reader.Read()) { try { int timeRes = reader.GetInt32(1); string kksAsu = reader.GetString(0); double val = reader.GetFloat(2); long resultTime = timesDict[timeRes]; Data[resultTime][kksAsu] = val; } catch (Exception e) { Logger.Info(e.ToString()); } } reader.Close(); } catch (Exception e) { Logger.Info(e.ToString()); } } } } catch (Exception e) { Logger.Info(e.ToString()); } } } con.Close(); Status.Text = "Чтение завершено"; List <string> thAsuList = new List <string>(); List <string> thTechList = new List <string>(); foreach (SignalInfo si in epa.SelectedAnalogSignals) { thAsuList.Add(String.Format("<th>{0}</th>", si.ShortName)); try { string kksTech = epa.ASUTechDict[si.KKS]; SignalInfo tech = epa.FindSignal(epa.TechRoot, kksTech, null); thTechList.Add(String.Format("<th>{0}</th>", tech.ShortName)); } catch { thTechList.Add("<th>-</th>"); } } OutputData.writeToOutput(fn, String.Format("<table border='1'><tr><th rowspan='2'>Дата</th>{0}</tr><tr>{1}</tr>", string.Join(" ", thAsuList), string.Join(" ", thTechList))); foreach (int tm in Data.Keys) { OutputData.writeToOutput(fn, String.Format("<tr><th>{0}</th><td>{1}</td></tr>", EPADB.GetDate(tm), String.Join("</td><td>", Data[tm].Values))); } OutputData.writeToOutput(fn, "</table>"); graph.CurveList.Clear(); graph.XAxis.Scale.Min = Data.Keys.First(); graph.XAxis.Scale.Max = Data.Keys.Last(); graph.XAxis.Scale.MinAuto = false; graph.XAxis.Scale.MaxAuto = false; graph.XAxis.Title.IsVisible = false; graph.YAxis.IsVisible = false; graph.YAxis.Title.IsVisible = false; graph.Legend.FontSpec.Size = 6; graph.Legend.Location.X = 0; graph.Legend.Location.Y = 0; graph.Title.IsVisible = false; graph.YAxis.Scale.FontSpec.Size = 6; graph.YAxis.IsVisible = false; graph.XAxis.Scale.FontSpec.Size = 6; int index = 0; foreach (SignalInfo si in epa.SelectedAnalogSignals) { try { string name = si.ShortName; int axInd = graph.AddYAxis(""); graph.YAxisList[axInd].Color = Colors[index % 8]; graph.YAxisList[axInd].Scale.FontSpec.Size = 6; graph.YAxisList[axInd].Scale.FontSpec.FontColor = Colors[index % 8]; try { string kksTech = epa.ASUTechDict[si.KKS]; SignalInfo tech = epa.FindSignal(epa.TechRoot, kksTech, null); name = name + " (" + tech.ShortName + ")"; } catch { } PointPairList list = new PointPairList(); foreach (int tm in Data.Keys) { list.Add(new PointPair(tm, Data[tm][si.KKS])); } graph.AddCurve(name, list, Colors[index % 8], SymbolType.None); graph.CurveList[index].YAxisIndex = axInd; } catch (Exception e) { Logger.Info(e.ToString()); } graph.AxisChange(); index++; } }
private void Redraw() { if (GraphControl == null) { return; } GraphControl.GraphPane.CurveList.Clear(); GraphPane pane = GraphControl.GraphPane; pane.YAxisList.Clear(); pane.Title.Text = ""; //var graphs = m_Graphs.SelectMany(g => g.Value).ToList(); if (m_Graphs.SelectMany(g => g.Value).Count() == 0) { pane.XAxis.Title.Text = ""; return; } var yAxises = new Dictionary <string, int>(); int color = 0; foreach (var keyValue in m_Graphs) { var lineColor = GraphSettings.CurveLines[color++].LineColor; for (int i = 0; i < keyValue.Value.Count(); i++) { Graph graph = keyValue.Value[i]; var line = graph.GetLineItem(); if (GraphSettings.Smooth) { var curList = (IPointList)line.Points.Clone(); var average = new MovingAverage(GraphSettings.SmoothPeriod); switch (GraphSettings.SmoothType) { case SmoothModel.Average: for (int j = 0; j < curList.Count; j++) { average.Push(curList[j].Y); curList[j].Y = average.Average; } break; case SmoothModel.Median: for (int j = 0; j < curList.Count; j++) { average.Push(curList[i].Y); curList[j].Y = average.Median; } break; default: break; } line.Points = curList; } var yAxisLabel = graph.YAxis + (string.IsNullOrEmpty(graph.Y_Unit) ? "" : (", " + graph.Y_Unit)); if (!yAxises.ContainsKey(yAxisLabel)) { yAxises.Add(yAxisLabel, pane.AddYAxis(yAxisLabel)); } line.YAxisIndex = yAxises[yAxisLabel]; line.Line.Style = (System.Drawing.Drawing2D.DashStyle)i; line.Line.Color = lineColor; pane.CurveList.Add(line); } } pane.XAxis.Title.Text = m_Graphs.First().Value.First().XAxis + (string.IsNullOrEmpty(m_Graphs.First().Value.First().X_Unit) ? "" : (", " + m_Graphs.First().Value.First().X_Unit)); pane.Title.Text = ""; GraphControl.AxisChange(); LegendRedraw(GraphSettings.LegendVisible); AxisTitleRedraw(GraphSettings.AxisLabelVisible); #region AxisGrids pane.XAxis.MajorGrid.IsVisible = GraphSettings.MajorGrid; pane.YAxis.MajorGrid.IsVisible = GraphSettings.MajorGrid; pane.XAxis.MinorGrid.IsVisible = GraphSettings.MinorGrid; pane.YAxis.MinorGrid.IsVisible = GraphSettings.MinorGrid; pane.YAxis.MajorGrid.DashOn = 10; pane.YAxis.MajorGrid.DashOff = 5; pane.XAxis.MajorGrid.DashOn = 10; pane.XAxis.MajorGrid.DashOff = 5; pane.YAxis.MajorGrid.DashOn = 10; pane.YAxis.MajorGrid.DashOff = 5; pane.XAxis.MinorGrid.DashOn = 1; pane.XAxis.MinorGrid.DashOff = 2; pane.YAxis.MinorGrid.DashOn = 1; pane.YAxis.MinorGrid.DashOff = 2; #endregion DashOnOff GraphControl.Invalidate(); GraphControl.Refresh(); }
/* Plot ZedGraph Line Graph * @param ZedGraphControl zgc - the zedgraphcontrol (displays chart area) * @param HRMObjectCollection hrmobjectcollection - the collection of hrmobjects to display as plotted x,y data * @param int interval - the interval between each recorded line of data (polar cycle can be set to record data every x seconds) * @param List<int[]> intervals - a list of integer arrays of size 2, storing start and end x co-ordinates for each exercise interval */ public GraphPane plotLineGraph(ZedGraphControl zgc, HRMObjectCollectionClass hrmObjectCollection, int frequency, List <int[]> intervals = null) { if (hrmObjectCollection.getCount() == 0 || hrmObjectCollection.getObject(0).data == null) { throw new ArgumentException("HRMObjectCollection is Empty"); } // and labelled X-axis GraphPane pane = zgc.GraphPane; clearPane(pane); pane.AddYAxis(""); pane.Title.Text = "Polar Data Reader"; pane.XAxis.Title.Text = "Time (HH:MM:SS)"; pane.XAxis.IsVisible = true; // Plot // Loop through HRMObject Collection plotting each one individually for (int i = 0; i < hrmObjectCollection.getCount(); i++) { PointPairList ppList = new PointPairList(); for (int j = 0; j < duration; j++) { // X-Value double a = new XDate(startDateTime.AddSeconds(j * frequency).ToOADate()); // Note: this "frequency" is the polar cycle rate at which it records data by x seconds times // HRMObject Y-Value double b = hrmObjectCollection.getObject(i).data[j]; // Add to Point Pair List ppList.Add(a, b); // Intervals From HRMObjectPower if (intervals != null && hrmObjectCollection.getObject(i) is HRMObjectPowerClass) { for (int k = 0; k < intervals.Count(); k++) { for (int l = 0; l < intervals[k].Length; l++) { if (intervals[k][l] == j) { LineItem line = new LineItem(String.Empty, new[] { a, a }, new[] { 0.0, hrmObjectCollection.getObject(i).calcMax() }, // Set height of interval lines to max of this HRMObject's y-value Color.Black, SymbolType.None); line.Line.Width = 1f; // Add Interval Line pane.CurveList.Add(line); } } } } // Display the Y axis grid lines pane.YAxis.MajorGrid.IsVisible = true; pane.YAxis.MinorGrid.IsVisible = true; } // Add HRMObject Data Line LineItem myCurve = pane.AddCurve(hrmObjectCollection.getObject(i).legendText, ppList, hrmObjectCollection.getObject(i).color, SymbolType.Diamond); myCurve.Symbol.Fill = new Fill(Color.White); } // Format X-axis as Date pane.XAxis.MajorGrid.IsVisible = true; pane.XAxis.Type = AxisType.Date; pane.XAxis.Scale.Format = "T"; // Set X-axis scale to default pane.XAxis.Scale.Align = AlignP.Inside; pane.XAxis.Scale.MinAuto = true; pane.XAxis.Scale.MaxAuto = true; pane.XAxis.Scale.MinorStepAuto = true; pane.XAxis.Scale.MajorStepAuto = true; // Set Y-axis scale to default pane.YAxis.Scale.Align = AlignP.Inside; pane.YAxis.Scale.MinAuto = true; pane.YAxis.Scale.MaxAuto = true; pane.YAxis.Scale.MinorStepAuto = true; pane.YAxis.Scale.MajorStepAuto = true; pane.Chart.Fill = new Fill(Color.White, Color.LightGray, 45.0f); ZGraphControl(zgc); return(pane); }