• WPF——OXY绘图


    private PlotModel _plotModel;
            public PlotModel plotModel
            {
                get { return _plotModel; }
                set
                {
                    _plotModel = value;
                    RaisePropertyChanged("plotModel");
                }
            }
    
            public void LoadChart()
            {
                BeginDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff");
    
                Stopwatch sw = new Stopwatch();
                sw.Start();
    
                var resData = JsonConvert.DeserializeObject<List<ResultModel>>(WcfConnector.GetInstance().QuerySroodRawData(QueryEqpId, RouteSelected.RunId, SvidSelected.ParaName));
    
                var orderList = resData.OrderByDescending(m => m.val);
                var maxPoint = orderList.FirstOrDefault();
                var minPoint = orderList.LastOrDefault();
                var mean = 107.5;
    
                plotModel = new PlotModel()
                {
                    Title = "数据统计",
                    LegendTitle = "Max:红色,Min:黄色",
                    LegendOrientation = LegendOrientation.Horizontal,
                    LegendPlacement = LegendPlacement.Inside,
                    LegendPosition = LegendPosition.TopRight,
                    LegendBackground = OxyColor.FromAColor(200, OxyColors.Beige),
                    LegendBorder = OxyColors.Black,
                    DefaultFont = "微软雅黑",
                };
    
                #region X,Y轴
    
    
                //X轴
                var _dateAxis = new DateTimeAxis()
                {
                    MajorGridlineStyle = LineStyle.Solid,
                    MinorGridlineStyle = LineStyle.Dot,
                    IntervalLength = 80,
                    IsZoomEnabled = false,
                    IsPanEnabled = false,
                    StringFormat = "M/d HH:mm:ss",
                    Title = "时间"
                };
                plotModel.Axes.Add(_dateAxis);
    
                //var startDate = DateTime.Now.AddDays(-10);
                //var endDate = DateTime.Now;
                //var minValue = DateTimeAxis.ToDouble(startDate);
                //var maxValue = DateTimeAxis.ToDouble(endDate);
    
                //Y轴
                var _valueAxis = new LinearAxis()
                {
                    Title = "数值",
                    Maximum = maxPoint.val + maxPoint.val / 4,
                    Minimum = minPoint.val - minPoint.val / 3,
                    MajorGridlineStyle = LineStyle.Solid,//主刻度设置格网
                    MinorGridlineStyle = LineStyle.Dot,//子刻度设置格网样式
                    IntervalLength = 80,
                    Angle = 60,
                    IsZoomEnabled = true,//坐标轴缩放
                    IsPanEnabled = true,//图表缩放功能 
                    Position = AxisPosition.Left,
                };
                plotModel.Axes.Add(_valueAxis);
    
                #endregion
    
                #region 线条
    
                //动态线条
                var lineSerial = new LineSeries()
                {
                    Title = SvidSelected.ParaName,//eqpParam name
                    Color = OxyColors.Black,
                    Smooth = true,
                    MarkerType = MarkerType.Circle,
                    StrokeThickness = 1,
                    MarkerSize = 2,
                    MarkerStroke = OxyColors.BlueViolet,
                };
                plotModel.Series.Add(lineSerial);
    
                Task.Factory.StartNew(() =>
               {
                   for (int i = 0; i < resData.Count; i++)
                   {
                       lineSerial.Points.Add(DateTimeAxis.CreateDataPoint(resData[i].occurenceTime, resData[i].val));
                       plotModel.InvalidatePlot(true); //每秒刷新一次视图 
                       Thread.Sleep(200);
                   }
               });
    
                //plotModel.InvalidatePlot(false);
    
                #endregion
    
                #region 上下限
    
                //添加标注线
                var lineMaxAnnotation = new LineAnnotation()
                {//上限
                    Type = LineAnnotationType.Horizontal,
                    Y = maxPoint.val,
                    Text = "上限:" + maxPoint.val,
                    Color = OxyColors.Red,
                    LineStyle = LineStyle.DashDashDot,
                    StrokeThickness = 2
                };
                plotModel.Annotations.Add(lineMaxAnnotation);
    
                var lineMinAnnotation = new LineAnnotation()
                {//下限
                    Type = LineAnnotationType.Horizontal,
                    Color = OxyColors.Blue,
                    LineStyle = LineStyle.Dash,
                    StrokeThickness = 2,
                    Y = minPoint.val,
                    Text = "下限:" + minPoint.val
                };
                plotModel.Annotations.Add(lineMinAnnotation);
    
                var lineMean = new LineAnnotation()
                {//平均
                    Type = LineAnnotationType.Horizontal,
                    Color = OxyColors.Green,
                    LineStyle = LineStyle.LongDash,
                    StrokeThickness = 2,
                    Y = mean,
                    Text = "平均:" + mean
                };
                plotModel.Annotations.Add(lineMean);
    
                #endregion
    
                #region 最大值,最小值
    
                var min = new ScatterSeries();
                var MaxDataPoint = DateTimeAxis.CreateDataPoint(maxPoint.occurenceTime, maxPoint.val);
                min.Points.Add(new ScatterPoint(MaxDataPoint.X, MaxDataPoint.Y, 15));
                min.MarkerFill = OxyColor.FromAColor(120, OxyColors.Red);
                min.MarkerType = MarkerType.Circle;
                plotModel.Series.Add(min);
    
                var max = new ScatterSeries();
                var minDataPoint = DateTimeAxis.CreateDataPoint(minPoint.occurenceTime, minPoint.val);
                max.Points.Add(new ScatterPoint(minDataPoint.X, minDataPoint.Y, 15));
                max.MarkerFill = OxyColor.FromAColor(120, OxyColors.Yellow);
                max.MarkerType = MarkerType.Circle;
                plotModel.Series.Add(max);
    
                #endregion
    
                #region 线条2
    
                ////动态线条
                //var lineSerial3 = new LineSeries()
                //{
                //    Title = "CF3",
                //    Color = OxyColors.Blue,
                //    Smooth = true,
                //    MarkerType = MarkerType.Circle,
                //    StrokeThickness = 2,
                //    MarkerSize = 3,
                //    MarkerStroke = OxyColors.BlueViolet
                //};
                //plotModel.Series.Add(lineSerial3);
    
                //var count = 50;
    
                //var rd3 = new Random();
                //Task.Factory.StartNew(() =>
                //{
                //    var list = new List<DataPoint>();
    
                //    while (count > 0)
                //    {
                //        var point = DateTimeAxis.CreateDataPoint(DateTime.Now, rd3.Next(15, 60));
                //        list.Add(point);
                //        lineSerial3.Points.Add(point);
                //        //if (lineSerial3.Points.Count > 1000)
                //        //{
                //        //    lineSerial3.Points.RemoveAt(0);
                //        //}
                //        plotModel.InvalidatePlot(true); //每秒刷新一次视图 
                //        Thread.Sleep(500);
                //        count--;
                //    }
    
                //    if (list.Count > 0)
                //    {
                //        var list1 = list.OrderByDescending(m => m.Y);
                //        var maxPoint = list1.FirstOrDefault();
                //        var minPoint = list1.LastOrDefault();
    
                //        var min = new ScatterSeries();
                //        min.Points.Add(new ScatterPoint(maxPoint.X, maxPoint.Y, 15));
                //        min.MarkerFill = OxyColor.FromAColor(120, OxyColors.Red);
                //        min.MarkerType = MarkerType.Circle;
                //        plotModel.Series.Add(min);
    
                //        var max = new ScatterSeries();
                //        max.Points.Add(new ScatterPoint(minPoint.X, minPoint.Y, 15));
                //        max.MarkerFill = OxyColor.FromAColor(120, OxyColors.Yellow);
                //        max.MarkerType = MarkerType.Circle;
                //        plotModel.Series.Add(max);
    
                //    }
                //});
    
    
    
                #endregion
    
                EndDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff");
                sw.Stop();
                TotalDate = sw.ElapsedTicks / (decimal)Stopwatch.Frequency;
            }
  • 相关阅读:
    Sqli-labs Less-37 利用 ' 的utf-16突破mysql_real_escape_string()函数转义
    Sqli-labs Less-36 宽字节注入 绕过mysql_real_escape_string()函数转义
    闭包
    JavaScript(1)
    css和JavaScript
    解决奇怪的错误。访问的网页一直被拦截
    html网页乱码解决
    BZOJ 3676: [Apio2014]回文串 回文树 回文自动机
    BZOJ 3676: [Apio2014]回文串 后缀自动机 Manacher 倍增
    BZOJ 3238: [Ahoi2013]差异 后缀自动机 树形dp
  • 原文地址:https://www.cnblogs.com/ingstyle/p/11205191.html
Copyright © 2020-2023  润新知