最近在学习OxyPlot图表控件,一些基本的学习心得,在这里记录一下,方便以后进行查找。
 
一、引用
OxyPlot控件可以直接在VS的 “ Nuget ” 里面下载
 
选择:
 
下载最新版本的就行。
 
二、使用
 
在前端界面中,我们需要添加引用:
 
xmlns:oxy="http://oxyplot.org/wpf"
 
引用过后,添加图表的承载控件PlotView:
 
1 <Grid>
2 <oxy:PlotView Model="{Binding Model}" />
3 </Grid>
 
其中的 “ Model ” 与 后端的 ViewModel 进行绑定,这个属性相当于 ContentControl 控件的Content 属性。
 
在后端的 ViewModel 中,我们定义 前端界面中绑定的属性 “ Model ”:
 
1 private PlotModel model;
2 public PlotModel Model
3 {
4 get { return model; }
5 set { SetProperty(ref model, value); }
6 }
 
现在我们就可以开始 " 创作 " 了!
 
三、添加内容
 
这里就直接上代码了,相应的解释会放在代码中:
 
1、直线
 
首先我们先来画一条直线
 1 Private void GetLine()
2 {
3 var tmp = new PlotModel
4 {
5 Title = "Demo", //图表的Titile
6 Subtitle = "直线" //图表的说明
7 };
8 var series2 = new LineSeries
9 {
10 Title = "Series 2", //线的说明
11 MarkerType = MarkerType.Square //标记点 的类型、形状
12 };
13 series2.Points.Add(new DataPoint(0, 0));//添加线的第一个点坐标
14 series2.Points.Add(new DataPoint(4, 4));//添加线的第二个点的坐标
15 tmp.Series.Add(series2);//将线添加到图标的容器中
16 this.Model = tmp;//赋值
17 }
 
运行结果:
 
2、曲线
 
知道了直线怎么画,那么看看平滑的曲线该怎么画
 
 1 Private void GetSpline()
2 {
3 var lineSeries1 = new LineSeries { Title = "Series 1", MarkerType = MarkerType.Circle };
4 //画曲线主要是需要将线的 InterpolationAlgorithm 属性 设置为 CanonicalSpline 就可变成曲线
5 lineSeries1.InterpolationAlgorithm = InterpolationAlgorithms.CanonicalSpline;
6 lineSeries1.Points.Add(new DataPoint(0, 20));
7 lineSeries1.Points.Add(new DataPoint(10, 21));
8 lineSeries1.Points.Add(new DataPoint(20, 24));
9 lineSeries1.Points.Add(new DataPoint(30, 22));
10 lineSeries1.Points.Add(new DataPoint(40, 17));
11 lineSeries1.Points.Add(new DataPoint(50, 21));
12 lineSeries1.Points.Add(new DataPoint(60, 23));
13 lineSeries1.Points.Add(new DataPoint(70, 27));
14 lineSeries1.Points.Add(new DataPoint(80, 27));
15 lineSeries1.Points.Add(new DataPoint(90, 22));
16 lineSeries1.Points.Add(new DataPoint(100, 25));
17 tmp.Series.Add(lineSeries1);
18 this.Model = tmp;
19 }
效果图如下:
 
3、有填充的线
 
有时候有的需求是要将线进行填充,以达到更好的视觉效果:
 
以上面的例子为例:
 
 1 Private void GetSpline()
2 {
3 //将线进行填充 ,主要是将线的类型改为 AreaSeries 即可 但是此时是不会显示Mark点
4 var lineSeries1 = new AreaSeries { Title = "Series 1", MarkerType = MarkerType.Circle };
5
6 //画曲线主要是需要将线的 InterpolationAlgorithm 属性 设置为 CanonicalSpline 就可变成曲线
7 lineSeries1.InterpolationAlgorithm = InterpolationAlgorithms.CanonicalSpline;
8 lineSeries1.Points.Add(new DataPoint(0, 20));
9 lineSeries1.Points.Add(new DataPoint(10, 21));
10 lineSeries1.Points.Add(new DataPoint(20, 24));
11 lineSeries1.Points.Add(new DataPoint(30, 22));
12 lineSeries1.Points.Add(new DataPoint(40, 17));
13 lineSeries1.Points.Add(new DataPoint(50, 21));
14 lineSeries1.Points.Add(new DataPoint(60, 23));
15 lineSeries1.Points.Add(new DataPoint(70, 27));
16 lineSeries1.Points.Add(new DataPoint(80, 27));
17 lineSeries1.Points.Add(new DataPoint(90, 22));
18 lineSeries1.Points.Add(new DataPoint(100, 25));
19 tmp.Series.Add(lineSeries1);
20 this.Model = tmp;
21 }
4、标识
从 3、有填充的线 可以看到线的标识 遮挡住了一部分的线,这在构图时可能会损失许多数据
 
为了避免这种情况,就必须要移动标识的位置
 
你在问什么是标识???
 
 
这就是标识!!
 
以上面的例子为例:
 
 1 var tmp = new PlotModel { Title = "Demo", Subtitle = "曲线" };
2 tmp.LegendBackground = OxyColor.FromArgb(200, 255, 255, 255);//设置背景颜色
3 tmp.LegendBorder = OxyColors.Transparent;//设置边框颜色
4 tmp.LegendOrientation = LegendOrientation.Horizontal;//设置标识对其方式
5 tmp.LegendPlacement = LegendPlacement.Outside;//设置标识在图标中的相对位置 是在里面还是在外面
6 tmp.LegendPosition = LegendPosition.BottomLeft;//设置标识在整个容器中的位置 此时是左下角
7
8 //将线进行填充 ,主要是将线的类型改为 AreaSeries 即可 但是此时是不会显示Mark点
9 var lineSeries1 = new AreaSeries { Title = "Series 1", MarkerType = MarkerType.Circle };
10 //画曲线主要是需要将线的 InterpolationAlgorithm 属性 设置为 CanonicalSpline 就可变成曲线
11 lineSeries1.InterpolationAlgorithm = InterpolationAlgorithms.CanonicalSpline;
12 lineSeries1.Points.Add(new DataPoint(0, 20));
13 lineSeries1.Points.Add(new DataPoint(10, 21));
14 lineSeries1.Points.Add(new DataPoint(20, 24));
15 lineSeries1.Points.Add(new DataPoint(30, 22));
16 lineSeries1.Points.Add(new DataPoint(40, 17));
17 lineSeries1.Points.Add(new DataPoint(50, 21));
18 lineSeries1.Points.Add(new DataPoint(60, 23));
19 lineSeries1.Points.Add(new DataPoint(70, 27));
20 lineSeries1.Points.Add(new DataPoint(80, 27));
21 lineSeries1.Points.Add(new DataPoint(90, 22));
22 lineSeries1.Points.Add(new DataPoint(100, 25));
23 tmp.Series.Add(lineSeries1);
24 this.Model = tmp;
效果图如下:
 
 
 
下面是多条线的情况:
 1 var tmp = new PlotModel { Title = "Demo", Subtitle = "曲线" };
2 tmp.LegendBackground = OxyColor.FromArgb(200, 255, 255, 255);//设置背景颜色
3 tmp.LegendBorder = OxyColors.Transparent;//设置边框颜色
4 tmp.LegendOrientation = LegendOrientation.Horizontal;//设置标识对其方式
5 tmp.LegendPlacement = LegendPlacement.Outside;//设置标识在图标中的相对位置 是在里面还是在外面
6 tmp.LegendPosition = LegendPosition.BottomLeft;//设置标识在整个容器中的位置 此时是左下角
7
8 //line1
9 //将线进行填充 ,主要是将线的类型改为 AreaSeries 即可 但是此时是不会显示Mark点
10 var lineSeries1 = new AreaSeries { Title = "Series 1", MarkerType = MarkerType.Circle };
11 //画曲线主要是需要将线的 InterpolationAlgorithm 属性 设置为 CanonicalSpline 就可变成曲线
12 lineSeries1.InterpolationAlgorithm = InterpolationAlgorithms.CanonicalSpline;
13 lineSeries1.Points.Add(new DataPoint(0, 20));
14 lineSeries1.Points.Add(new DataPoint(10, 21));
15 lineSeries1.Points.Add(new DataPoint(20, 24));
16 lineSeries1.Points.Add(new DataPoint(30, 22));
17 lineSeries1.Points.Add(new DataPoint(40, 17));
18 lineSeries1.Points.Add(new DataPoint(50, 21));
19 lineSeries1.Points.Add(new DataPoint(60, 23));
20 lineSeries1.Points.Add(new DataPoint(70, 27));
21 lineSeries1.Points.Add(new DataPoint(80, 27));
22 lineSeries1.Points.Add(new DataPoint(90, 22));
23 lineSeries1.Points.Add(new DataPoint(100, 25));
24 tmp.Series.Add(lineSeries1);
25
26 //Line2
27 var series2 = new LineSeries { Title = "Series 2", MarkerType = MarkerType.Square };
28 series2.Points.Add(new DataPoint(0, 0));
29 series2.Points.Add(new DataPoint(4, 4));
30 series2.Points.Add(new DataPoint(10, 12));
31 series2.Points.Add(new DataPoint(20, 16));
32 series2.Points.Add(new DataPoint(30, 25));
33 series2.Points.Add(new DataPoint(40, 5));
34 tmp.Series.Add(series2);
35
36 this.Model = tmp;
运行效果如下:
 
 
 
5、设置坐标轴,以及设置带数值显示的折线
 
 1 var tmp = new PlotModel { Title = "Demo", Subtitle = "曲线" };
2 tmp.LegendBackground = OxyColor.FromArgb(200, 255, 255, 255);
3 tmp.LegendBorder = OxyColors.Transparent;
4 tmp.LegendOrientation = LegendOrientation.Horizontal;
5 tmp.LegendPlacement = LegendPlacement.Outside;
6 tmp.LegendPosition = LegendPosition.BottomLeft;
7 tmp.LegendSymbolLength = 24;
8
9 var linearAxis1 = new LinearAxis();
10 linearAxis1.MajorGridlineStyle = LineStyle.Solid;
11 linearAxis1.MinorGridlineStyle = LineStyle.Dot;
12 linearAxis1.Title = "Y";
13 linearAxis1.Minimum = 0;
14 linearAxis1.Maximum = 35;
15 tmp.Axes.Add(linearAxis1);
16
17 var linearAxis2 = new LinearAxis();
18 linearAxis2.MajorGridlineStyle = LineStyle.Solid;
19 linearAxis2.MinorGridlineStyle = LineStyle.Dot;
20 linearAxis2.Position = AxisPosition.Bottom;
21 linearAxis2.Title = "X";
22 tmp.Axes.Add(linearAxis2);
23
24 var lineSeries1 = new LineSeries { Title = "Series 1", MarkerType = MarkerType.Circle };
25 lineSeries1.LabelFormatString = "{1}";
26 lineSeries1.Points.Add(new DataPoint(0, 20));
27 lineSeries1.Points.Add(new DataPoint(10, 21));
28 lineSeries1.Points.Add(new DataPoint(20, 24));
29 lineSeries1.Points.Add(new DataPoint(30, 22));
30 lineSeries1.Points.Add(new DataPoint(40, 17));
31 lineSeries1.Points.Add(new DataPoint(50, 21));
32 lineSeries1.Points.Add(new DataPoint(60, 23));
33 lineSeries1.Points.Add(new DataPoint(70, 27));
34 lineSeries1.Points.Add(new DataPoint(80, 27));
35 lineSeries1.Points.Add(new DataPoint(90, 22));
36 tmp.Series.Add(lineSeries1);
37
38 var series2 = new LineSeries { Title = "Series 2", MarkerType = MarkerType.Square };
39 series2.Points.Add(new DataPoint(0, 0));
40 series2.Points.Add(new DataPoint(4, 4));
41 series2.Points.Add(new DataPoint(10, 12));
42 series2.Points.Add(new DataPoint(20, 16));
43 series2.Points.Add(new DataPoint(30, 25));
44 series2.Points.Add(new DataPoint(40, 5));
45
46 tmp.Series.Add(series2);
47 this.Model = tmp;
运行图如下:
 
暂时的学习就到这里,剩余的可能要以后才能更新。
 
如果有错误希望能够及时得到大家的指导。
 
 
 

【WPF】 OxyPlot图表控件学习的更多相关文章

  1. WPF 曲线图表控件(自制)(二)

    原文:WPF 曲线图表控件(自制)(二) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/koloumi/article/details/775218 ...

  2. WPF 曲线图表控件(自制)(一)

    原文:WPF 曲线图表控件(自制)(一) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/koloumi/article/details/775092 ...

  3. WPF Visifire 图表控件

    Visifire WPF 图表控件 破解 可能用WPF生成过图表的开发人员都知道,WPF虽然本身的绘图能力强大,但如果每种图表都自己去实现一次的话可能工作量就大了, 尤其是在开发时间比较紧的情况下.这 ...

  4. C# WPF DevExpress 图表控件之柱状图

    说明:DevExpress版本是17.1.VS是2015. XAML: <!--#region 图表控件--> <dxc:ChartControl x:Name="char ...

  5. WPF 自定义UI控件学习

    最近项目中运用到了WPF处理三维软件,在C/S结构中WPF做UI还是有很多优越性,简单的学了一点WPF知识,成功的完成项目目标.项目过度阶段对于WPF的一些基本特点有了进一步了解 .至此花费一点时间研 ...

  6. 图表控件== 百度 echarts的入门学习

    花了3天的时间 去学习跟试用之前两款的图表控件 hightcharts(商业,人性化,新手非常方便试用,图表少了点) 跟chartjs==>搭配vue更好 控件,整体而言都还可以. http:/ ...

  7. Visifire For WPF 图表控件 如何免费

    可能用WPF生成过图表的开发人员都知道,WPF虽然本身的绘图能力强大,但如果每种图表都自己去实现一次的话可能工作量就大了, 尤其是在开发时间比较紧的情况下.这时候有必要借助一种专业的图表工具. Vis ...

  8. 图表控件的学习===》hightChart 和 Chartjs的使用

    hightChart : 比较旧的图表控件   商业需要授权 Chartjs 免费开源 刚开始使用了下 hightchart 然后参考示例 建了对应的参数配置的类, 也顺利的集合到后台动态传输.  后 ...

  9. ASP.NET Core MVC TagHelper实践HighchartsNET快速图表控件-开源

    ASP.NET Core MVC TagHelper最佳实践HighchartsNET快速图表控件支持ASP.NET Core. 曾经在WebForms上写过 HighchartsNET快速图表控件- ...

随机推荐

  1. P4293 [WC2010]能量场

    P4293 [WC2010]能量场 题意 给你 \(n\) 个粒子,每个粒子有两个权值 \(m_i,c_i\) 每个相邻有序对 \((a,b)\) 会产生 \(m_am_b(c_a-c_b)\) 的贡 ...

  2. At 、Crontabl定时任务

    之前笔者是在本地写的博客,然后用 windows 定时任务启动写的脚本上传到 Github 上,现在又遇到了 Linux 上的定时任务,项目还要用到 Quartz 定时任务框架 1. 一次性定时任务 ...

  3. document.all("div).style.display = "none"与 等于""的区别

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 微信小程序 -- 英语词典 (小程序插件)

    英语词典小程序 基于英语词典小程序插件 - 提供开源地址 项目地址 英语词典小程序插件: 微信小程序 词典 真题基础服务插件(gitee.com) 功能特色 [x] 全面详实的经典词库,详细释义覆盖约 ...

  5. vulnhub-DC:7靶机渗透记录

    准备工作 在vulnhub官网下载DC:7靶机DC: 7 ~ VulnHub 导入到vmware,设置成NAT模式 打开kali准备进行渗透(ip:192.168.200.6) 信息收集 已经知道了靶 ...

  6. 【java基础】枚举

    目录 枚举的定义 枚举的使用 原理 枚举的扩展 单例模式 避免反射攻击 反序列化 策略模式 总结 枚举的定义 public enum Color { Red,Blue,Green; } 枚举的使用 C ...

  7. Optional解决空指针

    Java 8 Optional 类 Java 8 新特性 Optional 类是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象. O ...

  8. springboot 中 inputStream 神秘消失之谜

    序言 最近小明接手了前同事的代码,意料之外.情理之中的遇到了坑. 为了避免掉入同一个坑两次,小明决定把这个坑记下来,并在坑前立一个大牌子,避免其他小伙伴掉进去. HTTPClient 模拟调用 为了把 ...

  9. Android面试大揭秘!从技术面被“虐”到征服CTO,全凭这份强到离谱的pdf

    在笔者面试这一个月,看了不少文章,也刷了不少面试题,但真正有深度,适合4年及以上Android高工的内容少之又少 在面试准备阶段,笔者准备了三个月左右的时间,结合相关资料及源码,完成了一系列的深度学习 ...

  10. 【SpringBoot技术专题】「JWT技术专区」SpringSecurity整合JWT授权和认证实现

    JWT基本概念 JWT,即 JSON Web Tokens(RFC 7519),是一个广泛用于验证 REST APIs 的标准.虽说是一个新兴技术,但它却得以迅速流行. JWT的验证过程是: 前端(客 ...