private void InitializeChart() { this.RadChart1.LayoutUpdated += this.RadChart1_LayoutUpdated; var seriesMapping = GetLineSeries(); RadChart1.SeriesMappings.Add(seriesMapping); RadChart1.Background = new SolidColorBrush(Colors.Transparent); RadChart1.DefaultView.ChartLegend.Visibility = Visibility.Collapsed; RadChart1.DefaultView.ChartArea.Padding= new Thickness(0); AxisX axisX = new AxisX() { AutoRange = false, IsDateTime = true, Visibility = Visibility.Collapsed, MinValue = DateTime.Today.AddDays(-1).ToOADate(), MaxValue = DateTime.Today.AddDays(1).ToOADate() }; RadChart1.DefaultView.ChartArea.AxisX = axisX; AxisY axisY = new AxisY() { AutoRange = false, IsZeroBased = true, Visibility = Visibility.Collapsed, MinValue = 0, MaxValue = 4, StripLinesVisibility = Visibility.Collapsed }; RadChart1.DefaultView.ChartArea.AxisY = axisY; RadChart1.ItemsSource = GetData(); }
/// <summary> /// Destination coordinates are relative microsteps. delay is supplied as milliseconds to delay between steps. /// </summary> public void GotoNonLinear(int destinationX, int destinationY, int destinationZ, int delay, out string errorMessage) { errorMessage = ""; int x = 0; int y = 0; int z = 0; int stepX; int stepY; int stepZ; // Set X Direction if (destinationX > 0) { stepX = 1; AxisX.StepDirection = true; } else { stepX = -1; AxisX.StepDirection = false; } // Set Y Direction if (destinationY > 0) { stepY = 1; AxisY.StepDirection = true; } else { stepY = -1; AxisY.StepDirection = false; } // Set Z Direction if (destinationZ > 0) { stepZ = 1; AxisZ.StepDirection = true; } else { stepZ = -1; AxisZ.StepDirection = false; } while (x != destinationX || y != destinationY || z != destinationZ) { if (Program.MotionInterrupt) { if (!Program.Paused) { errorMessage = GetEStopErrorMessage(); return; } } // Step X? if (x != destinationX) { x += stepX; AxisX.Step(); } // Step Y? if (y != destinationY) { y += stepY; AxisY.Step(); } // Step Z? if (z != destinationZ) { z += stepZ; AxisZ.Step(); } DelayBy(delay); } }
private void ResetAxisOptions(AxisX xAxis) { xAxis.DateTimeScaleOptions.ScaleMode = ScaleMode.Continuous; xAxis.Label.TextPattern = "{A:MM/dd HH:mm}"; xAxis.DateTimeScaleOptions.GridSpacing = 1; xAxis.Tickmarks.MinorVisible = false; xAxis.Label.Angle = -5; xAxis.DateTimeScaleOptions.AutoGrid = true; }
///<inheritdoc/> public override void Redraw(Rect bounds) { if (CellSize.X == 0 || CellSize.Y == 0) { throw new Exception($"{nameof(CellSize)} cannot be 0"); } SetDriverColorToGraphColor(); Move(0, 0); // clear all old content for (int i = 0; i < Bounds.Height; i++) { Move(0, i); Driver.AddStr(new string (' ', Bounds.Width)); } // If there is no data do not display a graph if (!Series.Any() && !Annotations.Any()) { return; } // Draw 'before' annotations foreach (var a in Annotations.ToArray().Where(a => a.BeforeSeries)) { a.Render(this); } SetDriverColorToGraphColor(); AxisY.DrawAxisLine(this); AxisX.DrawAxisLine(this); AxisY.DrawAxisLabels(this); AxisX.DrawAxisLabels(this); // Draw a cross where the two axis cross var axisIntersection = new Point(AxisY.GetAxisXPosition(this), AxisX.GetAxisYPosition(this)); if (AxisX.Visible && AxisY.Visible) { Move(axisIntersection.X, axisIntersection.Y); AddRune(axisIntersection.X, axisIntersection.Y, '\u253C'); } SetDriverColorToGraphColor(); // The drawable area of the graph (anything that isn't in the margins) Rect drawBounds = new Rect((int)MarginLeft, 0, Bounds.Width - ((int)MarginLeft), Bounds.Height - (int)MarginBottom); RectangleF graphSpace = ScreenToGraphSpace(drawBounds); foreach (var s in Series.ToArray()) { s.DrawSeries(this, drawBounds, graphSpace); // If a series changes the graph color reset it SetDriverColorToGraphColor(); } SetDriverColorToGraphColor(); // Draw 'after' annotations foreach (var a in Annotations.ToArray().Where(a => !a.BeforeSeries)) { a.Render(this); } }
private async void DrawSpectrogram() { if (_bitmap == null) { return; } // stop here if a drawing operation is already in progress if (_isDrawing) { _isRequested = true; return; } // set the drawing flag _isDrawing = true; // preprocess the data to draw var mapped = Data.Where(p => p.Y is double[]).Select(p => new Tuple <double, double[]>(AxisX.GetItemPixel(p.X), (double[])p.Y)).OrderBy(p => p.Item1).ToList(); var palette = ColorPalette; // lock the backbuffer var bitmap = _bitmap; bitmap.Lock(); var width = bitmap.PixelWidth; var height = bitmap.PixelHeight; var stride = bitmap.BackBufferStride; var backbuffer = bitmap.BackBuffer; // fill the backbuffer from a background thread await Task.Run(() => { // map data points to axis pixels if (mapped.Count > 0) { var rows = mapped.First().Item2.Length; var rowHeight = height / (double)rows; var maximumValue = mapped.Aggregate(new double[rows], (c, p) => { for (var i = 0; i < c.Length; i++) { c[i] = Math.Max(c[i], p.Item2[i]); } return(c); }); // iterate over all pixels in the series var lastColumn = 0; var nextColumn = 1; for (var x = 0.0; x < width; x++) { // find the next data column while (nextColumn < mapped.Count - 1 && x > mapped[nextColumn].Item1) { lastColumn = nextColumn; nextColumn += 1; } // calculate the horizontal relative position in between the two columns var factorX = (x - mapped[lastColumn].Item1) / (mapped[nextColumn].Item1 - mapped[lastColumn].Item1); // draw the column var lastRow = 0; var nextRow = 1; for (var y = 0.0; y < height; y++) { // find the next data row while (nextRow < mapped[nextColumn].Item2.Length - 1 && y > nextRow * rowHeight) { lastRow = nextRow; nextRow += 1; } // calculate the horizontal relative position in between the two rows var factorY = (y - lastRow * rowHeight) / rowHeight; // interpolate the point value double c; if (factorX >= 0 && factorX <= 1 && factorY >= 0 && factorY <= 1) { var a00 = mapped[lastColumn].Item2[lastRow]; var a10 = mapped[nextColumn].Item2[lastRow] - mapped[lastColumn].Item2[lastRow]; var a01 = mapped[lastColumn].Item2[nextRow] - mapped[lastColumn].Item2[lastRow]; var a11 = mapped[nextColumn].Item2[nextRow] + mapped[lastColumn].Item2[lastRow] - (mapped[nextColumn].Item2[lastRow] + mapped[lastColumn].Item2[nextRow]); c = a00 + a10 * factorX + a01 * factorY + a11 * factorX * factorY; } else { c = 0; } // scale the pixel value to 0..1 var scaledMaximum = factorY * (maximumValue[nextRow] - maximumValue[lastRow]) + maximumValue[lastRow]; var scaledValue = scaledMaximum > 1e-3 ? c / scaledMaximum : 0; // get the color for the pixel var color = palette[(int)(scaledValue * (palette.Count - 1))]; // draw the pixel var value = (byte)(255 * scaledValue); unsafe { var address = (byte *)(backbuffer + ((int)(height - 1 - y) * stride) + (int)x * 4); *(address++) = color.B; *(address++) = color.G; *(address++) = color.R; *(address++) = color.A; } } } } else { var color = palette[0]; for (var i = 0; i < width *height * 4; i += 4) { unsafe { var address = (byte *)(backbuffer + i); *(address++) = color.B; *(address++) = color.G; *(address++) = color.R; *(address++) = color.A; } } } }); // write the bitmap contents bitmap.AddDirtyRect(new Int32Rect(0, 0, width, height)); bitmap.Unlock(); // invalidate visuals to redraw _isDrawing = false; InvalidateVisual(); if (_isRequested) { _isRequested = false; DrawSpectrogram(); } }
public WaveformMonitor(Color lineColor, string title = "") { SampleFrequency = 0.0; ContainerChart = new LightningChartUltimate { Name = "Chart1", ChartName = "Chart1", Title = { Text = title }, VerticalAlignment = VerticalAlignment.Stretch, HorizontalAlignment = HorizontalAlignment.Stretch }; ContainerChart.BeginUpdate(); ContainerChart.ViewXY.AxisLayout.AutoAdjustMargins = true; ContainerChart.ViewXY.DropOldSeriesData = false; _xAxis = ContainerChart.ViewXY.XAxes[0]; _xAxis.ValueType = AxisValueType.Number; _xAxis.SweepingGap = 2; _xAxis.ScrollMode = XAxisScrollMode.None; _xAxis.Title.Visible = false; _xAxis.Title.Text = "Range"; _xAxis.Title.VerticalAlign = XAxisTitleAlignmentVertical.Top; _xAxis.Title.HorizontalAlign = XAxisTitleAlignmentHorizontal.Right; _xAxis.LabelsPosition = Alignment.Near; _xAxis.LabelsFont = new WPFFont("Tahoma", 9.0, "9", true, false); _xAxis.MajorDivTickStyle.Visible = true; _xAxis.MinorDivTickStyle.Visible = true; _xAxis.MajorGrid.Visible = true; _xAxis.MinorGrid.Visible = true; _xAxis.LabelsVisible = true; _xAxis.SteppingInterval = 1; _xAxis.MouseScaling = false; _xAxis.MouseScrolling = false; _xAxis.MouseInteraction = false; _xAxis.AxisThickness = 1; var axisY = ContainerChart.ViewXY.YAxes[0]; axisY.SetRange(0, 30000); axisY.Title.Visible = false; axisY.LabelsFont = new WPFFont("Tahoma", 9.0, "9", true, false); ContainerChart.ViewXY.GraphBackground.GradientDirection = 270; ContainerChart.ViewXY.GraphBackground.GradientFill = GradientFill.Cylindrical; var color = ContainerChart.ViewXY.GraphBackground.Color; ContainerChart.ViewXY.GraphBackground.Color = Color.FromArgb(150, color.R, color.G, color.B); ContainerChart.Title.Font = new WPFFont("Tahoma", 11.0, "11", true, false); ContainerChart.Title.Align = ChartTitleAlignment.TopCenter; ContainerChart.Title.Offset.SetValues(0, 25); ContainerChart.Title.Color = lineColor; ContainerChart.ViewXY.Margins = new Thickness(70, 10, 15, 10); ContainerChart.ViewXY.ZoomPanOptions.ZoomRectLine.Color = Colors.Lime; ContainerChart.ChartBackground.Color = ChartTools.CalcGradient(lineColor, Colors.Black, 65); ContainerChart.ChartBackground.GradientDirection = 0; ContainerChart.ChartBackground.GradientFill = GradientFill.Cylindrical; ContainerChart.ViewXY.LegendBox.Visible = false; var series = new SampleDataSeries(ContainerChart.ViewXY, _xAxis, axisY) { LineStyle = { Width = 1f, Color = lineColor, AntiAliasing = LineAntialias.None }, MouseInteraction = false }; ContainerChart.ViewXY.SampleDataSeries.Add(series); ContainerChart.EndUpdate(); }
private void CreateChart() { gridChart.Children.Clear(); if (m_chart != null) { m_chart.Dispose(); m_chart = null; } //Create new chart m_chart = new LightningChartUltimate(); //Disable rendering, strongly recommended before updating chart properties m_chart.BeginUpdate(); m_chart.Title.Visible = false; m_chart.Background = new SolidColorBrush(Color.FromArgb(0, 0, 0, 0)); m_chart.ChartBackground.Color = Color.FromArgb(0, 0, 0, 0); m_chart.ChartBackground.GradientFill = GradientFill.Solid; m_chart.ViewXY.GraphBackground.Color = Color.FromArgb(0, 0, 0, 0); m_chart.ViewXY.GraphBackground.GradientFill = GradientFill.Solid; m_chart.ViewXY.GraphBorderColor = Color.FromArgb(0, 0, 0, 0); m_chart.ViewXY.XAxes[0].Title.Visible = false; m_chart.ViewXY.XAxes[0].MinorGrid.Visible = false; m_chart.ViewXY.XAxes[0].AxisThickness = 2; m_chart.ViewXY.XAxes[0].AxisColor = Color.FromArgb(0xff, 0xff, 0xff, 0xff);//Color.FromArgb(100, 135, 205, 238); m_chart.ViewXY.XAxes[0].MinorGrid.Visible = false; m_chart.ViewXY.XAxes[0].LabelsFont = new WpfFont(System.Drawing.FontFamily.GenericSansSerif, 9, System.Drawing.FontStyle.Regular); m_chart.ViewXY.YAxes[0].Title.Visible = false; // Configure x-axis. AxisX axisX = m_chart.ViewXY.XAxes[0]; axisX.ScrollMode = XAxisScrollMode.None; axisX.ValueType = AxisValueType.Number; //Add annotation as selection box AnnotationXY box = new AnnotationXY(m_chart.ViewXY, axisX, m_chart.ViewXY.YAxes[0]); box.Style = AnnotationStyle.Rectangle; box.RotateByMouse = false; box.AnchorAdjustByMouse = false; box.TargetMoveByMouse = false; box.Behind = false; box.Fill.Color = Color.FromArgb(50, 255, 165, 0); box.Fill.GradientColor = Color.FromArgb(50, 255, 140, 0); box.Shadow.Visible = false; box.TextStyle.Visible = false; box.Sizing = AnnotationXYSizing.AxisValuesBoundaries; box.ResizedByMouse += box_ResizedByMouse; box.MovedByMouse += box_MovedByMouse; box.AxisValuesBoundaries.SetValues(0, 100, 0, 100); box.NibStyle.Color = Colors.Yellow; m_chart.ViewXY.Annotations.Add(box); //Create annotation for showing the nearest point info AnnotationXY annot = new AnnotationXY(m_chart.ViewXY, m_chart.ViewXY.XAxes[0], m_chart.ViewXY.YAxes[0]); annot.Fill.Color = Color.FromArgb(180, 30, 30, 30); annot.Fill.GradientFill = GradientFill.Solid; annot.BorderLineStyle.Color = Color.FromArgb(50, 255, 255, 255); annot.Shadow.Visible = false; annot.TargetCoordinateSystem = AnnotationTargetCoordinates.AxisValues; annot.Visible = false; //Don't show before the data point has been found annot.MouseInteraction = false; annot.LocationCoordinateSystem = CoordinateSystem.RelativeCoordinatesToTarget; annot.LocationRelativeOffset.X = 0; annot.LocationRelativeOffset.Y = -40; annot.TextStyle.Color = Colors.White; annot.Style = AnnotationStyle.Rectangle; m_chart.ViewXY.Annotations.Add(annot); m_chart.ViewXY.LegendBoxes[0].Visible = true; m_chart.ViewXY.LegendBoxes[0].Layout = LegendBoxLayout.VerticalColumnSpan; m_chart.ViewXY.LegendBoxes[0].Fill.Style = RectFillStyle.None; m_chart.ViewXY.LegendBoxes[0].Shadow.Visible = false; m_chart.ViewXY.LegendBoxes[0].BorderWidth = 0; m_chart.ViewXY.LegendBoxes[0].Position = LegendBoxPositionXY.TopRight; m_chart.ViewXY.LegendBoxes[0].Offset.SetValues(-80, 10); m_chart.ViewXY.LegendBoxes[0].SeriesTitleFont = new WpfFont(System.Drawing.FontFamily.GenericSansSerif, 9, System.Drawing.FontStyle.Regular); //Add a series //AddSeries(); //UpdatePointColors(); m_chart.ViewXY.ZoomToFit(); m_chart.MouseMove += new MouseEventHandler(m_chart_MouseMove); //Allow chart rendering m_chart.EndUpdate(); gridChart.Children.Add(m_chart); showCheckBox.Checked += showCheckBox_Checked; showCheckBox.Unchecked += showCheckBox_Checked; }
/// <summary> /// 将数据加载到图表中 /// </summary> private void Chart_Load() { int[,] EctractPointChartx = new int[3, 4] { { 1, 2, 3, 4 }, { 1, 2, 3, 4 }, { 1, 2, 3, 4 } }; //x轴标记 string[] CompressionRatiox = new string[] { "OneTenth", "OneFifteenth", "OneTwentieth" }; //x轴标记 string[,] SynchronizeChartx = new string[3, 4] { { "10-1", "10-2", "10-3", "10-4" }, { "15-1", "15-2", "15-3", "15-4" }, { "20-1", "20-2", "20-3", "20-4" } }; //x轴标记 #region 柱状图 //添加 图表标题 EctractPointChart.Titles.Add(new ChartTitle()); EctractPointChart.Titles[0].Text = "提点测试"; EctractPointChart.Titles[0].Font = new Font("Times New Roman", 9f, FontStyle.Bold); //控件背景 EctractPointChart.BackColor = Color.Transparent; //图表区背景 EctractPointChart.BackColor = Color.Transparent; EctractPointChart.BorderColor = Color.Transparent; //Access the diagram's properties.把 Diagram 对象转换为所需的图象类型 XYDiagram EctractPointChartdiagram = (XYDiagram)EctractPointChart.Diagram; EctractPointChartdiagram.Rotated = false; //图像是否旋转 EctractPointChart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.True; //是否在图表上显示图例 //// Customize the appearance of the X-axis title.调整 X-轴 AxisX EctractPointChartxAxis = EctractPointChartdiagram.AxisX; //获取X轴 EctractPointChartxAxis.Alignment = AxisAlignment.Near; //指定轴相对于另一主轴的位置。属性 AxisAlignment.Zero 设置仅对主轴可用 EctractPointChartxAxis.Title.Text = "拼图数"; //设置轴标题 EctractPointChartxAxis.Title.Font = new Font("Times New Roman", 9f); EctractPointChartxAxis.Title.Visibility = DevExpress.Utils.DefaultBoolean.True; //是否显示轴标题 EctractPointChartxAxis.Label.TextPattern = ""; //绑定数据,ExtractPointSpeedArray数组存放提点速度数据。 EctractPointChart.Series[0].Points.AddPoint(EctractPointChartx[0, 0], Form1.ExtractPointSpeedArray[0]); EctractPointChart.Series[0].Points[0].Color = Color.DodgerBlue; EctractPointChart.Series[0].Points.AddPoint(EctractPointChartx[0, 1], Form1.ExtractPointSpeedArray[3]); EctractPointChart.Series[0].Points[1].Color = Color.DodgerBlue; EctractPointChart.Series[0].Points.AddPoint(EctractPointChartx[0, 2], Form1.ExtractPointSpeedArray[6]); EctractPointChart.Series[0].Points[2].Color = Color.DodgerBlue; EctractPointChart.Series[0].Points.AddPoint(EctractPointChartx[0, 3], Form1.ExtractPointSpeedArray[9]); EctractPointChart.Series[0].Points[3].Color = Color.DodgerBlue; EctractPointChart.Series[1].Points.AddPoint(EctractPointChartx[1, 0], Form1.ExtractPointSpeedArray[1]); EctractPointChart.Series[1].Points[0].Color = Color.IndianRed; EctractPointChart.Series[1].Points.AddPoint(EctractPointChartx[1, 1], Form1.ExtractPointSpeedArray[4]); EctractPointChart.Series[1].Points[1].Color = Color.IndianRed; EctractPointChart.Series[1].Points.AddPoint(EctractPointChartx[1, 2], Form1.ExtractPointSpeedArray[7]); EctractPointChart.Series[1].Points[2].Color = Color.IndianRed; EctractPointChart.Series[1].Points.AddPoint(EctractPointChartx[1, 3], Form1.ExtractPointSpeedArray[10]); EctractPointChart.Series[1].Points[3].Color = Color.IndianRed; EctractPointChart.Series[2].Points.AddPoint(EctractPointChartx[2, 0], Form1.ExtractPointSpeedArray[2]); EctractPointChart.Series[2].Points[0].Color = Color.OliveDrab; EctractPointChart.Series[2].Points.AddPoint(EctractPointChartx[2, 1], Form1.ExtractPointSpeedArray[5]); EctractPointChart.Series[2].Points[1].Color = Color.OliveDrab; EctractPointChart.Series[2].Points.AddPoint(EctractPointChartx[2, 2], Form1.ExtractPointSpeedArray[8]); EctractPointChart.Series[2].Points[2].Color = Color.OliveDrab; EctractPointChart.Series[2].Points.AddPoint(EctractPointChartx[2, 3], Form1.ExtractPointSpeedArray[11]); EctractPointChart.Series[2].Points[3].Color = Color.OliveDrab; #endregion #region 柱状图 //添加 图表标题 CompressionChart.Titles.Add(new ChartTitle()); CompressionChart.Titles[0].Text = "压缩测试"; CompressionChart.Titles[0].Font = new Font("Times New Roman", 9f, FontStyle.Bold); //控件背景 CompressionChart.BackColor = Color.Transparent; //图表区背景 CompressionChart.BackColor = Color.Transparent; CompressionChart.BorderColor = Color.Transparent; // Access the diagram's properties.把 Diagram 对象转换为所需的图象类型 XYDiagram diagram = (XYDiagram)CompressionChart.Diagram; diagram.Rotated = false; //图像是否旋转 CompressionChart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.True; //是否在图表上显示图例 //// Customize the appearance of the X-axis title.调整 X-轴 AxisX xAxis = diagram.AxisX; //获取X轴 xAxis.Alignment = AxisAlignment.Near; //指定轴相对于另一主轴的位置。属性 AxisAlignment.Zero 设置仅对主轴可用 xAxis.Title.Text = "压缩比"; //设置轴标题 xAxis.Title.Font = new Font("Times New Roman", 9f); xAxis.Title.Visibility = DevExpress.Utils.DefaultBoolean.True; //是否显示轴标题 xAxis.Label.TextPattern = ""; //绑定数据,CompressionSpeedArray数组存放压缩速度数据。 CompressionChart.Series[0].Points.AddPoint(CompressionRatiox[0], Form1.CompressionSpeedArray[0] * 2); CompressionChart.Series[0].Points[0].Color = Color.CornflowerBlue; CompressionChart.Series[0].Points.AddPoint(CompressionRatiox[1], Form1.CompressionSpeedArray[1] * 2); CompressionChart.Series[0].Points[1].Color = Color.CornflowerBlue; CompressionChart.Series[0].Points.AddPoint(CompressionRatiox[2], Form1.CompressionSpeedArray[2] * 2); CompressionChart.Series[0].Points[2].Color = Color.CornflowerBlue; #endregion #region 柱状图 //添加 图表标题 SynchronizeChart.Titles.Add(new ChartTitle()); SynchronizeChart.Titles[0].Text = "同步提点压缩测试"; SynchronizeChart.Titles[0].Font = new Font("Times New Roman", 9f, FontStyle.Bold); //控件背景 SynchronizeChart.BackColor = Color.Transparent; //图表区背景 SynchronizeChart.BackColor = Color.Transparent; SynchronizeChart.BorderColor = Color.Transparent; // Access the diagram's properties.把 Diagram 对象转换为所需的图象类型 XYDiagram Synchronizediagram = (XYDiagram)SynchronizeChart.Diagram; Synchronizediagram.Rotated = false; //图像是否旋转 SynchronizeChart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.True; //是否在图表上显示图例 //// Customize the appearance of the X-axis title.调整 X-轴 AxisX SynchronizexAxis = Synchronizediagram.AxisX; //获取X轴 SynchronizexAxis.Alignment = AxisAlignment.Near; //指定轴相对于另一主轴的位置。属性 AxisAlignment.Zero 设置仅对主轴可用 SynchronizexAxis.Title.Text = "拼图数&压缩比"; //设置轴标题 SynchronizexAxis.Title.Font = new Font("Times New Roman", 9f); SynchronizexAxis.Title.Visibility = DevExpress.Utils.DefaultBoolean.True; //是否显示轴标题 SynchronizexAxis.Label.TextPattern = ""; //绑定数据,SynchronizeSpeedArray数组存放同步提点压缩速度数据。 SynchronizeChart.Series[0].Points.AddPoint(SynchronizeChartx[0, 0], Form1.SynchronizeSppedArray[0]); SynchronizeChart.Series[0].Points[0].Color = Color.DodgerBlue; SynchronizeChart.Series[0].Points.AddPoint(SynchronizeChartx[0, 1], Form1.SynchronizeSppedArray[3]); SynchronizeChart.Series[0].Points[1].Color = Color.DodgerBlue; SynchronizeChart.Series[0].Points.AddPoint(SynchronizeChartx[0, 2], Form1.SynchronizeSppedArray[6]); SynchronizeChart.Series[0].Points[2].Color = Color.DodgerBlue; SynchronizeChart.Series[0].Points.AddPoint(SynchronizeChartx[0, 3], Form1.SynchronizeSppedArray[9]); SynchronizeChart.Series[0].Points[3].Color = Color.DodgerBlue; SynchronizeChart.Series[1].Points.AddPoint(SynchronizeChartx[0, 0], Form1.SynchronizeSppedArray[1]); SynchronizeChart.Series[1].Points[0].Color = Color.IndianRed; SynchronizeChart.Series[1].Points.AddPoint(SynchronizeChartx[0, 1], Form1.SynchronizeSppedArray[4]); SynchronizeChart.Series[1].Points[1].Color = Color.IndianRed; SynchronizeChart.Series[1].Points.AddPoint(SynchronizeChartx[0, 2], Form1.SynchronizeSppedArray[7]); SynchronizeChart.Series[1].Points[2].Color = Color.IndianRed; SynchronizeChart.Series[1].Points.AddPoint(SynchronizeChartx[0, 3], Form1.SynchronizeSppedArray[10]); SynchronizeChart.Series[1].Points[3].Color = Color.IndianRed; SynchronizeChart.Series[2].Points.AddPoint(SynchronizeChartx[0, 0], Form1.SynchronizeSppedArray[2]); SynchronizeChart.Series[2].Points[0].Color = Color.OliveDrab; SynchronizeChart.Series[2].Points.AddPoint(SynchronizeChartx[0, 1], Form1.SynchronizeSppedArray[5]); SynchronizeChart.Series[2].Points[1].Color = Color.OliveDrab; SynchronizeChart.Series[2].Points.AddPoint(SynchronizeChartx[0, 2], Form1.SynchronizeSppedArray[8]); SynchronizeChart.Series[2].Points[2].Color = Color.OliveDrab; SynchronizeChart.Series[2].Points.AddPoint(SynchronizeChartx[0, 3], Form1.SynchronizeSppedArray[11]); SynchronizeChart.Series[2].Points[3].Color = Color.OliveDrab; SynchronizeChart.Series[0].Points.AddPoint(SynchronizeChartx[1, 0], Form1.SynchronizeSppedArray[12]); SynchronizeChart.Series[0].Points[0].Color = Color.DodgerBlue; SynchronizeChart.Series[0].Points.AddPoint(SynchronizeChartx[1, 1], Form1.SynchronizeSppedArray[15]); SynchronizeChart.Series[0].Points[1].Color = Color.DodgerBlue; SynchronizeChart.Series[0].Points.AddPoint(SynchronizeChartx[1, 2], Form1.SynchronizeSppedArray[18]); SynchronizeChart.Series[0].Points[2].Color = Color.DodgerBlue; SynchronizeChart.Series[0].Points.AddPoint(SynchronizeChartx[1, 3], Form1.SynchronizeSppedArray[21]); SynchronizeChart.Series[0].Points[3].Color = Color.DodgerBlue; SynchronizeChart.Series[1].Points.AddPoint(SynchronizeChartx[1, 0], Form1.SynchronizeSppedArray[13]); SynchronizeChart.Series[1].Points[0].Color = Color.IndianRed; SynchronizeChart.Series[1].Points.AddPoint(SynchronizeChartx[1, 1], Form1.SynchronizeSppedArray[16]); SynchronizeChart.Series[1].Points[1].Color = Color.IndianRed; SynchronizeChart.Series[1].Points.AddPoint(SynchronizeChartx[1, 2], Form1.SynchronizeSppedArray[19]); SynchronizeChart.Series[1].Points[2].Color = Color.IndianRed; SynchronizeChart.Series[1].Points.AddPoint(SynchronizeChartx[1, 3], Form1.SynchronizeSppedArray[22]); SynchronizeChart.Series[1].Points[3].Color = Color.IndianRed; SynchronizeChart.Series[2].Points.AddPoint(SynchronizeChartx[1, 0], Form1.SynchronizeSppedArray[14]); SynchronizeChart.Series[2].Points[0].Color = Color.OliveDrab; SynchronizeChart.Series[2].Points.AddPoint(SynchronizeChartx[1, 1], Form1.SynchronizeSppedArray[17]); SynchronizeChart.Series[2].Points[1].Color = Color.OliveDrab; SynchronizeChart.Series[2].Points.AddPoint(SynchronizeChartx[1, 2], Form1.SynchronizeSppedArray[20]); SynchronizeChart.Series[2].Points[2].Color = Color.OliveDrab; SynchronizeChart.Series[2].Points.AddPoint(SynchronizeChartx[1, 3], Form1.SynchronizeSppedArray[23]); SynchronizeChart.Series[2].Points[3].Color = Color.OliveDrab; SynchronizeChart.Series[0].Points.AddPoint(SynchronizeChartx[2, 0], Form1.SynchronizeSppedArray[24]); SynchronizeChart.Series[0].Points[0].Color = Color.DodgerBlue; SynchronizeChart.Series[0].Points.AddPoint(SynchronizeChartx[2, 1], Form1.SynchronizeSppedArray[27]); SynchronizeChart.Series[0].Points[1].Color = Color.DodgerBlue; SynchronizeChart.Series[0].Points.AddPoint(SynchronizeChartx[2, 2], Form1.SynchronizeSppedArray[30]); SynchronizeChart.Series[0].Points[2].Color = Color.DodgerBlue; SynchronizeChart.Series[0].Points.AddPoint(SynchronizeChartx[2, 3], Form1.SynchronizeSppedArray[33]); SynchronizeChart.Series[0].Points[3].Color = Color.DodgerBlue; SynchronizeChart.Series[1].Points.AddPoint(SynchronizeChartx[2, 0], Form1.SynchronizeSppedArray[25]); SynchronizeChart.Series[1].Points[0].Color = Color.IndianRed; SynchronizeChart.Series[1].Points.AddPoint(SynchronizeChartx[2, 1], Form1.SynchronizeSppedArray[28]); SynchronizeChart.Series[1].Points[1].Color = Color.IndianRed; SynchronizeChart.Series[1].Points.AddPoint(SynchronizeChartx[2, 2], Form1.SynchronizeSppedArray[31]); SynchronizeChart.Series[1].Points[2].Color = Color.IndianRed; SynchronizeChart.Series[1].Points.AddPoint(SynchronizeChartx[2, 3], Form1.SynchronizeSppedArray[34]); SynchronizeChart.Series[1].Points[3].Color = Color.IndianRed; SynchronizeChart.Series[2].Points.AddPoint(SynchronizeChartx[2, 0], Form1.SynchronizeSppedArray[26]); SynchronizeChart.Series[2].Points[0].Color = Color.OliveDrab; SynchronizeChart.Series[2].Points.AddPoint(SynchronizeChartx[2, 1], Form1.SynchronizeSppedArray[29]); SynchronizeChart.Series[2].Points[1].Color = Color.OliveDrab; SynchronizeChart.Series[2].Points.AddPoint(SynchronizeChartx[2, 2], Form1.SynchronizeSppedArray[32]); SynchronizeChart.Series[2].Points[2].Color = Color.OliveDrab; SynchronizeChart.Series[2].Points.AddPoint(SynchronizeChartx[2, 3], Form1.SynchronizeSppedArray[35]); SynchronizeChart.Series[2].Points[3].Color = Color.OliveDrab; #endregion }
/// <summary> /// 将数据加载到图表中 /// </summary> private void Chart_Load(int test) { int[,] EctractPointChartx = new int[3, 4] { { 1, 2, 3, 4 }, { 1, 2, 3, 4 }, { 1, 2, 3, 4 } }; //x轴标记 string[] CompressionRatiox = new string[] { "OneTenth", "OneFifteenth", "OneTwentieth" }; //x轴标记 string[,] SynchronizeChartx = new string[3, 4] { { "10-1", "10-2", "10-3", "10-4" }, { "15-1", "15-2", "15-3", "15-4" }, { "20-1", "20-2", "20-3", "20-4" } }; //x轴标记 #region 柱状图 //添加 图表标题 EctractPointChart.Titles.Add(new ChartTitle()); EctractPointChart.Titles[0].Text = "提点测试"; EctractPointChart.Titles[0].Font = new Font("Times New Roman", 9f, FontStyle.Bold); //控件背景 EctractPointChart.BackColor = Color.Transparent; //图表区背景 EctractPointChart.BackColor = Color.Transparent; EctractPointChart.BorderColor = Color.Transparent; //Access the diagram's properties.把 Diagram 对象转换为所需的图象类型 XYDiagram EctractPointChartdiagram = (XYDiagram)EctractPointChart.Diagram; EctractPointChartdiagram.Rotated = false; //图像是否旋转 EctractPointChart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.True; //是否在图表上显示图例 //// Customize the appearance of the X-axis title.调整 X-轴 AxisX EctractPointChartxAxis = EctractPointChartdiagram.AxisX; //获取X轴 EctractPointChartxAxis.Alignment = AxisAlignment.Near; //指定轴相对于另一主轴的位置。属性 AxisAlignment.Zero 设置仅对主轴可用 EctractPointChartxAxis.Title.Text = "拼图数"; //设置轴标题 EctractPointChartxAxis.Title.Font = new Font("Times New Roman", 9f); EctractPointChartxAxis.Title.Visibility = DevExpress.Utils.DefaultBoolean.True; //是否显示轴标题 EctractPointChartxAxis.Label.TextPattern = ""; //绑定数据,ExtractPointSpeedArray数组存放提点速度数据。 EctractPointChart.Series[0].Points.AddPoint(EctractPointChartx[0, 0], 3227.235); EctractPointChart.Series[0].Points[0].Color = Color.DodgerBlue; EctractPointChart.Series[0].Points.AddPoint(EctractPointChartx[0, 1], 3347.281); EctractPointChart.Series[0].Points[1].Color = Color.DodgerBlue; EctractPointChart.Series[0].Points.AddPoint(EctractPointChartx[0, 2], 3571.429); EctractPointChart.Series[0].Points[2].Color = Color.DodgerBlue; EctractPointChart.Series[0].Points.AddPoint(EctractPointChartx[0, 3], 3611.738); EctractPointChart.Series[0].Points[3].Color = Color.DodgerBlue; EctractPointChart.Series[1].Points.AddPoint(EctractPointChartx[1, 0], 4002.324); EctractPointChart.Series[1].Points[0].Color = Color.IndianRed; EctractPointChart.Series[1].Points.AddPoint(EctractPointChartx[1, 1], 4166.667); EctractPointChart.Series[1].Points[1].Color = Color.IndianRed; EctractPointChart.Series[1].Points.AddPoint(EctractPointChartx[1, 2], 4651.163); EctractPointChart.Series[1].Points[2].Color = Color.IndianRed; EctractPointChart.Series[1].Points.AddPoint(EctractPointChartx[1, 3], 4532.521); EctractPointChart.Series[1].Points[3].Color = Color.IndianRed; EctractPointChart.Series[2].Points.AddPoint(EctractPointChartx[2, 0], 4526.245); EctractPointChart.Series[2].Points[0].Color = Color.OliveDrab; EctractPointChart.Series[2].Points.AddPoint(EctractPointChartx[2, 1], 5063.291); EctractPointChart.Series[2].Points[1].Color = Color.OliveDrab; EctractPointChart.Series[2].Points.AddPoint(EctractPointChartx[2, 2], 5504.587); EctractPointChart.Series[2].Points[2].Color = Color.OliveDrab; EctractPointChart.Series[2].Points.AddPoint(EctractPointChartx[2, 3], 5194.805); EctractPointChart.Series[2].Points[3].Color = Color.OliveDrab; #endregion #region 柱状图 //添加 图表标题 CompressionChart.Titles.Add(new ChartTitle()); CompressionChart.Titles[0].Text = "压缩测试"; CompressionChart.Titles[0].Font = new Font("Times New Roman", 9f, FontStyle.Bold); //控件背景 CompressionChart.BackColor = Color.Transparent; //图表区背景 CompressionChart.BackColor = Color.Transparent; CompressionChart.BorderColor = Color.Transparent; // Access the diagram's properties.把 Diagram 对象转换为所需的图象类型 XYDiagram diagram = (XYDiagram)CompressionChart.Diagram; diagram.Rotated = false; //图像是否旋转 CompressionChart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.True; //是否在图表上显示图例 //// Customize the appearance of the X-axis title.调整 X-轴 AxisX xAxis = diagram.AxisX; //获取X轴 xAxis.Alignment = AxisAlignment.Near; //指定轴相对于另一主轴的位置。属性 AxisAlignment.Zero 设置仅对主轴可用 xAxis.Title.Text = "压缩比"; //设置轴标题 xAxis.Title.Font = new Font("Times New Roman", 9f); xAxis.Title.Visibility = DevExpress.Utils.DefaultBoolean.True; //是否显示轴标题 xAxis.Label.TextPattern = ""; //绑定数据,CompressionSpeedArray数组存放压缩速度数据。 CompressionChart.Series[0].Points.AddPoint(CompressionRatiox[0], 2215.113); CompressionChart.Series[0].Points[0].Color = Color.CornflowerBlue; CompressionChart.Series[0].Points.AddPoint(CompressionRatiox[1], 2403.857); CompressionChart.Series[0].Points[1].Color = Color.CornflowerBlue; CompressionChart.Series[0].Points.AddPoint(CompressionRatiox[2], 2693.603); CompressionChart.Series[0].Points[2].Color = Color.CornflowerBlue; #endregion #region 柱状图 //添加 图表标题 SynchronizeChart.Titles.Add(new ChartTitle()); SynchronizeChart.Titles[0].Text = "同步提点压缩测试"; SynchronizeChart.Titles[0].Font = new Font("Times New Roman", 9f, FontStyle.Bold); //控件背景 SynchronizeChart.BackColor = Color.Transparent; //图表区背景 SynchronizeChart.BackColor = Color.Transparent; SynchronizeChart.BorderColor = Color.Transparent; // Access the diagram's properties.把 Diagram 对象转换为所需的图象类型 XYDiagram Synchronizediagram = (XYDiagram)SynchronizeChart.Diagram; Synchronizediagram.Rotated = false; //图像是否旋转 SynchronizeChart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.True; //是否在图表上显示图例 //// Customize the appearance of the X-axis title.调整 X-轴 AxisX SynchronizexAxis = Synchronizediagram.AxisX; //获取X轴 SynchronizexAxis.Alignment = AxisAlignment.Near; //指定轴相对于另一主轴的位置。属性 AxisAlignment.Zero 设置仅对主轴可用 SynchronizexAxis.Title.Text = "拼图数&压缩比"; //设置轴标题 SynchronizexAxis.Title.Font = new Font("Times New Roman", 9f); SynchronizexAxis.Title.Visibility = DevExpress.Utils.DefaultBoolean.True; //是否显示轴标题 SynchronizexAxis.Label.TextPattern = ""; //绑定数据,SynchronizeSpeedArray数组存放同步提点压缩速度数据。 SynchronizeChart.Series[0].Points.AddPoint(SynchronizeChartx[0, 0], 1875.352); SynchronizeChart.Series[0].Points[0].Color = Color.DodgerBlue; SynchronizeChart.Series[0].Points.AddPoint(SynchronizeChartx[0, 1], 1924.212); SynchronizeChart.Series[0].Points[1].Color = Color.DodgerBlue; SynchronizeChart.Series[0].Points.AddPoint(SynchronizeChartx[0, 2], 2132.521); SynchronizeChart.Series[0].Points[2].Color = Color.DodgerBlue; SynchronizeChart.Series[0].Points.AddPoint(SynchronizeChartx[0, 3], 1952.650); SynchronizeChart.Series[0].Points[3].Color = Color.DodgerBlue; SynchronizeChart.Series[1].Points.AddPoint(SynchronizeChartx[0, 0], 1934.251); SynchronizeChart.Series[1].Points[0].Color = Color.IndianRed; SynchronizeChart.Series[1].Points.AddPoint(SynchronizeChartx[0, 1], 2102.250); SynchronizeChart.Series[1].Points[1].Color = Color.IndianRed; SynchronizeChart.Series[1].Points.AddPoint(SynchronizeChartx[0, 2], 2254.231); SynchronizeChart.Series[1].Points[2].Color = Color.IndianRed; SynchronizeChart.Series[1].Points.AddPoint(SynchronizeChartx[0, 3], 2002.290); SynchronizeChart.Series[1].Points[3].Color = Color.IndianRed; SynchronizeChart.Series[2].Points.AddPoint(SynchronizeChartx[0, 0], 1975.625); SynchronizeChart.Series[2].Points[0].Color = Color.OliveDrab; SynchronizeChart.Series[2].Points.AddPoint(SynchronizeChartx[0, 1], 2231.652); SynchronizeChart.Series[2].Points[1].Color = Color.OliveDrab; SynchronizeChart.Series[2].Points.AddPoint(SynchronizeChartx[0, 2], 2301.254); SynchronizeChart.Series[2].Points[2].Color = Color.OliveDrab; SynchronizeChart.Series[2].Points.AddPoint(SynchronizeChartx[0, 3], 2152.235); SynchronizeChart.Series[2].Points[3].Color = Color.OliveDrab; SynchronizeChart.Series[0].Points.AddPoint(SynchronizeChartx[1, 0], 2042.541); SynchronizeChart.Series[0].Points[0].Color = Color.DodgerBlue; SynchronizeChart.Series[0].Points.AddPoint(SynchronizeChartx[1, 1], 2152.321); SynchronizeChart.Series[0].Points[1].Color = Color.DodgerBlue; SynchronizeChart.Series[0].Points.AddPoint(SynchronizeChartx[1, 2], 2014.258); SynchronizeChart.Series[0].Points[2].Color = Color.DodgerBlue; SynchronizeChart.Series[0].Points.AddPoint(SynchronizeChartx[1, 3], 2152.874); SynchronizeChart.Series[0].Points[3].Color = Color.DodgerBlue; SynchronizeChart.Series[1].Points.AddPoint(SynchronizeChartx[1, 0], 2251.245); SynchronizeChart.Series[1].Points[0].Color = Color.IndianRed; SynchronizeChart.Series[1].Points.AddPoint(SynchronizeChartx[1, 1], 2240.752); SynchronizeChart.Series[1].Points[1].Color = Color.IndianRed; SynchronizeChart.Series[1].Points.AddPoint(SynchronizeChartx[1, 2], 2157.542); SynchronizeChart.Series[1].Points[2].Color = Color.IndianRed; SynchronizeChart.Series[1].Points.AddPoint(SynchronizeChartx[1, 3], 2274.632); SynchronizeChart.Series[1].Points[3].Color = Color.IndianRed; SynchronizeChart.Series[2].Points.AddPoint(SynchronizeChartx[1, 0], 2267.854); SynchronizeChart.Series[2].Points[0].Color = Color.OliveDrab; SynchronizeChart.Series[2].Points.AddPoint(SynchronizeChartx[1, 1], 2396.824); SynchronizeChart.Series[2].Points[1].Color = Color.OliveDrab; SynchronizeChart.Series[2].Points.AddPoint(SynchronizeChartx[1, 2], 2174.950); SynchronizeChart.Series[2].Points[2].Color = Color.OliveDrab; SynchronizeChart.Series[2].Points.AddPoint(SynchronizeChartx[1, 3], 2296.420); SynchronizeChart.Series[2].Points[3].Color = Color.OliveDrab; SynchronizeChart.Series[0].Points.AddPoint(SynchronizeChartx[2, 0], 2265.541); SynchronizeChart.Series[0].Points[0].Color = Color.DodgerBlue; SynchronizeChart.Series[0].Points.AddPoint(SynchronizeChartx[2, 1], 2145.842); SynchronizeChart.Series[0].Points[1].Color = Color.DodgerBlue; SynchronizeChart.Series[0].Points.AddPoint(SynchronizeChartx[2, 2], 2235.275); SynchronizeChart.Series[0].Points[2].Color = Color.DodgerBlue; SynchronizeChart.Series[0].Points.AddPoint(SynchronizeChartx[2, 3], 2358.352); SynchronizeChart.Series[0].Points[3].Color = Color.DodgerBlue; SynchronizeChart.Series[1].Points.AddPoint(SynchronizeChartx[2, 0], 2312.201); SynchronizeChart.Series[1].Points[0].Color = Color.IndianRed; SynchronizeChart.Series[1].Points.AddPoint(SynchronizeChartx[2, 1], 2212.542); SynchronizeChart.Series[1].Points[1].Color = Color.IndianRed; SynchronizeChart.Series[1].Points.AddPoint(SynchronizeChartx[2, 2], 2268.435); SynchronizeChart.Series[1].Points[2].Color = Color.IndianRed; SynchronizeChart.Series[1].Points.AddPoint(SynchronizeChartx[2, 3], 2410.745); SynchronizeChart.Series[1].Points[3].Color = Color.IndianRed; SynchronizeChart.Series[2].Points.AddPoint(SynchronizeChartx[2, 0], 2322.401); SynchronizeChart.Series[2].Points[0].Color = Color.OliveDrab; SynchronizeChart.Series[2].Points.AddPoint(SynchronizeChartx[2, 1], 2298.215); SynchronizeChart.Series[2].Points[1].Color = Color.OliveDrab; SynchronizeChart.Series[2].Points.AddPoint(SynchronizeChartx[2, 2], 2358.352); SynchronizeChart.Series[2].Points[2].Color = Color.OliveDrab; SynchronizeChart.Series[2].Points.AddPoint(SynchronizeChartx[2, 3], 2425.212); SynchronizeChart.Series[2].Points[3].Color = Color.OliveDrab; #endregion }
/// <summary> /// 初始化速度曲线 /// </summary> private void CreateVelocityChart() { //Create new _chartTemp _chartVelocity = new LightningChartUltimate(); //Disable rendering, strongly recommended before updating chart properties _chartVelocity.BeginUpdate(); //Reduce memory usage and increase performance. Destroys out-scrolled data. _chartVelocity.ViewXY.DropOldSeriesData = true; _chartVelocity.Parent = lightningChartUltimate3; _chartVelocity.Name = "Si prediction"; _chartVelocity.Title.Text = "铁水实时流速曲线"; _chartVelocity.Title.Color = PublicColor.FromArgb(255, Color.Yellow); _chartVelocity.Title.Font = new Font("黑体", 10, FontStyle.Bold); _chartVelocity.Dock = DockStyle.Fill; // Setup custom style. //ExampleUtils.SetStandardFlatStyle(_chartSi); _chartVelocity.Background.Color = PublicColor.FromArgb(255, Color.Gray); _chartVelocity.Background.GradientFill = GradientFill.Solid; //Configure x-axis AxisX xAxis = _chartVelocity.ViewXY.XAxes[0]; xAxis.ValueType = AxisValueType.DateTime; xAxis.Title.Text = "Time"; xAxis.AutoFormatLabels = false; //xAxis.LabelsTimeFormat = "dd/MM/yyyy\nHH:mm.ss"; xAxis.LabelsTimeFormat = "HH:mm.ss"; xAxis.LabelsAngle = 0; xAxis.ScrollMode = XAxisScrollMode.Scrolling; xAxis.LabelsFont = new Font("黑体", 6); xAxis.LabelsColor = PublicColor.FromArgb(255, Color.Yellow); xAxis.Visible = false; xAxis.Title.Visible = false; //Convert DateTime values to axis values DateTime now = DateTime.Now; double minX = xAxis.DateTimeToAxisValue(now); double maxX = xAxis.DateTimeToAxisValue(now) + 200; xAxis.SetRange(minX, maxX); //Configure y-axis AxisY yAxis = _chartVelocity.ViewXY.YAxes[0]; yAxis.Title.Text = "Si Predition"; yAxis.SetRange(4.5, 8); yAxis.LabelsFont = new Font("黑体", 6); yAxis.LabelsColor = PublicColor.FromArgb(255, Color.Yellow); yAxis.Title.Visible = false; //Configure and add series to the chart PointLineSeries series = new PointLineSeries(_chartVelocity.ViewXY, xAxis, yAxis); series.LineStyle.Color = Color.Yellow; series.MouseInteraction = false; _chartVelocity.ViewXY.PointLineSeries.Add(series); //Don't show legendbox _chartVelocity.ViewXY.LegendBoxes[0].Visible = false; //Allow chart rendering _chartVelocity.EndUpdate(); }
/// <summary> /// 初始化温度曲线 /// </summary> private void CreateTempChart() { //Create new _chartTemp _chartTemp = new LightningChartUltimate(); _chartTemp.BeginUpdate(); _chartTemp.ViewXY.DropOldSeriesData = true; _chartTemp.Parent = lightningChartUltimate1; _chartTemp.Name = "出铁口铁水温度曲线"; //_chartTemp.Title.Font.; _chartTemp.Title.Text = "出铁口铁水温度曲线"; _chartTemp.Title.Color = PublicColor.FromArgb(255, Color.Yellow); _chartTemp.Title.Font = new Font("黑体", 10, FontStyle.Bold); //_chartTemp.Title.Visible = false; _chartTemp.Dock = DockStyle.Fill; _chartTemp.Background.Color = PublicColor.FromArgb(255, Color.Gray); _chartTemp.Background.GradientFill = GradientFill.Solid; AxisX xAxis = _chartTemp.ViewXY.XAxes[0]; xAxis.ValueType = AxisValueType.DateTime; xAxis.Title.Text = "Time"; xAxis.AutoFormatLabels = false; //xAxis.LabelsTimeFormat = "dd/MM/yyyy\nHH:mm.ss"; xAxis.LabelsTimeFormat = "HH:mm.ss"; xAxis.LabelsAngle = 0; xAxis.ScrollMode = XAxisScrollMode.Scrolling; xAxis.Title.Visible = false; xAxis.Visible = false; //Convert DateTime values to axis values DateTime now = DateTime.Now; double minX = xAxis.DateTimeToAxisValue(now); double maxX = xAxis.DateTimeToAxisValue(now) + 100; xAxis.SetRange(minX, maxX); //Configure y-axis AxisY yAxis = _chartTemp.ViewXY.YAxes[0]; yAxis.Title.Text = "Temperature / °C"; yAxis.Title.Visible = false; yAxis.SetRange(1500, 1600); yAxis.LabelsFont = new Font("黑体", 6); yAxis.LabelsColor = PublicColor.FromArgb(255, Color.Yellow); //Configure and add series to the chart PointLineSeries series = new PointLineSeries(_chartTemp.ViewXY, xAxis, yAxis); series.LineStyle.Color = Color.Yellow; series.MouseInteraction = false; _chartTemp.ViewXY.PointLineSeries.Add(series); //Don't show legendbox _chartTemp.ViewXY.LegendBoxes[0].Visible = false; //Allow chart rendering _chartTemp.EndUpdate(); }
public override bool DrawPlot(Layer layer, ChartProperty property, bool onlyUpdateLastBar) { AxisX cAxisX = layer.AxisX; Rectangle cRectY = this.AxisY.AxisRectangle; int iIndex = 0; int iOldBKColor = __cGDI.SelectBackground(property.BackgroundColor); PowerLanguage.PenStyle cLinePen = this.ChartSetting.PenStyles[0]; IntPtr cOldPen = __cGDI.SelectPen(cLinePen); if (onlyUpdateLastBar) { iIndex = cAxisX.BarNumber + cAxisX.BarCount - 1; iIndex = (iIndex > cAxisX.DataCount) ? cAxisX.DataCount : iIndex; int iOffset = this.ConvertAxisScaleIndexToOffset(iIndex); int iX = cAxisX.ConvertBarNumberToWidth(iIndex).CenterPoint; int iPrevX = cAxisX.ConvertBarNumberToWidth(iIndex - 1).CenterPoint; if (!DrawClosingLine(iOffset, cRectY.Y, iX, iPrevX, new PowerLanguage.PenStyle(property.BackgroundColor, cLinePen.Width, cLinePen.Pattern))) { return(false); } } else { this.RefreshAxisY(property); __dPrevClose = double.NaN; int iCount = cAxisX.BarCount; int iStartIndex = cAxisX.BarNumber; for (int i = 0; i < iCount; i++) { iIndex = iStartIndex + i; if (iIndex > cAxisX.DataCount) { --iIndex; break; } else { if (__dPrevClose != double.NaN) { int iOffset = this.ConvertAxisScaleIndexToOffset(iIndex); int iX = cAxisX.ConvertBarNumberToWidth(iIndex).CenterPoint; int iPrevX = cAxisX.ConvertBarNumberToWidth(iIndex - 1).CenterPoint; DrawClosingLine(iOffset, cRectY.Y, iX, iPrevX, null); } } } if (this.PlotIndex == 0) //Plot 索引值為 0 才印出標題(其他的索引就不需要再印出標題) { DrawTitle(cRectY, property); } } __cGDI.RemoveObject(__cGDI.SelectPen(cOldPen)); if (!layer.Drawable) { layer.LegendIndex = iIndex; if (this.ChartSetting.IsShowNewPrice) //是否要顯示新價格線 { this.AxisY.Value = __cBars.Close[0]; //指定最新收盤價格 this.Painter.DrawAxisValueLabel(this.AxisY, this.ChartSetting.LegendColor, property); } } this.DrawLegend(layer.LegendIndex, property); __cGDI.SelectBackground(iOldBKColor); return(true); }
private void SetAxisXRanges(DateTime min, DateTime max, TimeSpan timeSpanPerGraph, AxisX axisX) { axisX.DateTimeScaleMode = DateTimeScaleMode.Manual; if (timeSpanPerGraph < new TimeSpan(0, 1, 0)) { axisX.DateTimeGridAlignment = DateTimeMeasurementUnit.Second; axisX.DateTimeMeasureUnit = DateTimeMeasurementUnit.Second; axisX.DateTimeOptions.Format = DateTimeFormat.ShortTime; } else if (timeSpanPerGraph <= new TimeSpan(12, 0, 0)) { axisX.DateTimeGridAlignment = DateTimeMeasurementUnit.Second; axisX.DateTimeMeasureUnit = DateTimeMeasurementUnit.Minute; axisX.DateTimeOptions.Format = DateTimeFormat.ShortTime; } else if (timeSpanPerGraph <= new TimeSpan(31, 0, 0, 1)) { axisX.DateTimeGridAlignment = DateTimeMeasurementUnit.Minute; axisX.DateTimeMeasureUnit = DateTimeMeasurementUnit.Minute; axisX.DateTimeOptions.Format = DateTimeFormat.ShortTime; } else { axisX.DateTimeGridAlignment = DateTimeMeasurementUnit.Minute; axisX.DateTimeMeasureUnit = DateTimeMeasurementUnit.Day; axisX.DateTimeOptions.Format = DateTimeFormat.ShortDate; } axisX.Range.SetMinMaxValues(min, max); }
public void SetDataSource(List <ReadingsSummary> items) { var cumTimeInfo = GetCumulativeWindows( DrillStartDate.Add(CumulativeTimeSpan), CumulativeTimeSpan, StepBack ); // todo: can this copy be eliminated? Func <ReadingsSummary, double> summaryValueFunction; Func <ReadingValues, double> valueFunction; var selAttrType = SelectedAttributeType; switch (selAttrType) { case ReadingAttributeType.WindSpeed: summaryValueFunction = r => r.WindSpeed; valueFunction = r => r.WindSpeed; break; case ReadingAttributeType.Temperature: summaryValueFunction = r => r.Temperature; valueFunction = r => r.Temperature; break; case ReadingAttributeType.Humidity: summaryValueFunction = r => r.Humidity; valueFunction = r => r.Humidity; break; case ReadingAttributeType.Pressure: summaryValueFunction = r => r.Pressure; valueFunction = r => r.Pressure; break; case ReadingAttributeType.WindDirection: summaryValueFunction = r => r.WindDirection; valueFunction = r => r.WindDirection; break; default: throw new NotSupportedException(String.Format("SelectedAttributeType {0} is not supported", selAttrType)); } var min = 0.0; var max = 0.0; var stdDevMin = 0.0; var stdDevMax = 0.0; if (items.Count > 0) { min = max = summaryValueFunction(items[0]); stdDevMin = stdDevMax = valueFunction(items[0].SampleStandardDeviation); for (int i = 1; i < items.Count; i++) { var value = summaryValueFunction(items[i]); if (value < min) { min = value; } else if (value > max) { max = value; } var stdDevValue = valueFunction(items[i].SampleStandardDeviation); if (stdDevValue < stdDevMin) { stdDevMin = stdDevValue; } else if (stdDevValue > stdDevMax) { stdDevMax = stdDevValue; } } } RecreateCumulativeGraphs(); // TODO: only when they need to change? for (int i = 0; i < cumTimeInfo.Count; i++) { var window = cumTimeInfo[i]; var chartReadings = items.Where(r => r.TimeStamp >= window.min && r.TimeStamp <= window.max).ToList(); //_cumulativeCharts[i].DataSource = chartReadings; var chart = _cumulativeCharts[i]; var diagram = chart.Diagram as XYDiagram; var seriesData = chart.Series[1]; var seriesStdDev = chart.Series[0]; seriesData.DataSource = chartReadings; seriesStdDev.DataSource = chartReadings.Select(r => new Reading(r.TimeStamp, r.SampleStandardDeviation)).ToList(); chart.Invalidate(); chart.Titles[0].Text = window.Name; AxisX axisX = diagram.AxisX; AxisY axisY = diagram.AxisY; var timeSpanPerGraph = window.Span; SetAxisYRanges(min, max, axisY); SetAxisYRanges(stdDevMin, stdDevMax, diagram.SecondaryAxesY[0]); SetAxisXRanges(window.min, window.max, timeSpanPerGraph, axisX); } }