WPF——OXY绘图
2024-10-21 04:05:07
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(, OxyColors.Beige),
LegendBorder = OxyColors.Black,
DefaultFont = "微软雅黑",
}; #region X,Y轴 //X轴
var _dateAxis = new DateTimeAxis()
{
MajorGridlineStyle = LineStyle.Solid,
MinorGridlineStyle = LineStyle.Dot,
IntervalLength = ,
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 / ,
Minimum = minPoint.val - minPoint.val / ,
MajorGridlineStyle = LineStyle.Solid,//主刻度设置格网
MinorGridlineStyle = LineStyle.Dot,//子刻度设置格网样式
IntervalLength = ,
Angle = ,
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 = ,
MarkerSize = ,
MarkerStroke = OxyColors.BlueViolet,
};
plotModel.Series.Add(lineSerial); Task.Factory.StartNew(() =>
{
for (int i = ; i < resData.Count; i++)
{
lineSerial.Points.Add(DateTimeAxis.CreateDataPoint(resData[i].occurenceTime, resData[i].val));
plotModel.InvalidatePlot(true); //每秒刷新一次视图
Thread.Sleep();
}
}); //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 =
};
plotModel.Annotations.Add(lineMaxAnnotation); var lineMinAnnotation = new LineAnnotation()
{//下限
Type = LineAnnotationType.Horizontal,
Color = OxyColors.Blue,
LineStyle = LineStyle.Dash,
StrokeThickness = ,
Y = minPoint.val,
Text = "下限:" + minPoint.val
};
plotModel.Annotations.Add(lineMinAnnotation); var lineMean = new LineAnnotation()
{//平均
Type = LineAnnotationType.Horizontal,
Color = OxyColors.Green,
LineStyle = LineStyle.LongDash,
StrokeThickness = ,
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, ));
min.MarkerFill = OxyColor.FromAColor(, 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, ));
max.MarkerFill = OxyColor.FromAColor(, 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;
}
最新文章
- npm源切换
- Web Service
- noi 1.5 43:质因数分解
- 最佳 Linux 发行版汇总
- JS复习
- When to use dequeueReusableCellWithIdentifier vs dequeueReusableCellWithIdentifier: forIndexPath
- 记一次纠结Macbook 重装OS X的系统
- Java(JVM运行时)各种内存区域详解及扩展
- Ubuntu12.04安装java6
- 在数据表中添加一个字段的SQL语句怎么写
- ibm rational software architect download
- OC基础-day04
- Kettle文本文件输出和输入控件使用中,换行符导致的问题处理
- 72、django之简单验证码实现与form表单钩子函数补充
- DB2 SQL Error: SQLCODE=-803, SQLSTATE=23505, SQLERRMC=2 (转载)
- vue环境下新建项目
- [Flutter] lib/main.dart:1: Warning: Interpreting this as package URI, &#39;package:flutter_app/main.dart&#39;.
- VideoPlayer播放
- Django-website 程序案例系列-14 缓存的应用配置文件的写法
- 使用 IntraWeb (34) - TIWAJAXNotifier