在C#中使用DevExpress中的ChartControl实现极坐标图

  • 背景
  • 实现思路
  • 参考代码

背景

在工控软件的开发中很多业务场景就是使用图表控件展示设备和工艺参数。如下图案例:

实现思路

通常简单的做法是使用图表控件实现,常用的图表控件有开源的ZedGraph,还有付费的TeeChart和DevExpress。常规的曲线图、柱状图、饼图的实现,三个控件都可以很好的实现,建议使用开源的ZedGraph。但是在实现雷达图、极坐标图等特定图表时ZedGraph就不能支持,TeeChart用起来也不是那么完美,对比后发现DevExpress的ChartControl实现还是不错的。

参考代码

本案例是使用的是DevExpress 18.1.3版本,之前在14版本上也试过,但是有一个弊端就是实现极坐标图的时候,第一个点和最后一个点总是自动多一条闭合线,会形成一个闭合的多边形,因此升级了一下版本。在DevExpress中雷达图和极坐标图使用的是父子类的关系,很多属性一致,为了可以自己定义圆盘上的刻度范围,这是采用雷达图实现自定义的极坐标图。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using DevExpress.XtraCharts;namespace WinTest
{public partial class Form1 : Form{private Stopwatch sw = new Stopwatch();public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){sw.Restart();int fontSize = 9;                   //字号int count = 1;                      //曲线数量int points = 8;                     //每条曲线的点数int angleMaxValue = 24;             //角度最大值int maxShowPints = 30;              //最大显示的点数for (int i = 0; i < this.Controls.Count; i++){if (this.Controls[i] is ChartControl){this.Controls.RemoveAt(i);break;}}// Create a new chart.ChartControl RadarLineChart = new ChartControl();// Add a radar series to it.Series[] seriesArr = new Series[count];List<SeriesPoint>[] pintValuesList = new List<SeriesPoint>[count];for (int i = 0; i < seriesArr.Length; i++){pintValuesList[i] = new List<SeriesPoint>();seriesArr[i] = new Series("Series " + i, ViewType.RadarLine);      //使用雷达折线图实例化SeriesRadarLineSeriesView radLineSeriesView = (seriesArr[i].View as RadarLineSeriesView);radLineSeriesView.MarkerVisibility = DevExpress.Utils.DefaultBoolean.False;  //去掉线条中的圆点radLineSeriesView.Closed = false;           //线条不形成闭环RadarLineChart.Series.Add(seriesArr[i]);}// Flip the diagram (if necessary).RadarDiagram radarDiagram = RadarLineChart.Diagram as RadarDiagram;radarDiagram.StartAngleInDegrees = 0; //开始的角度radarDiagram.AxisX.WholeRange.MinValue = 0;         //设置角度范围最小值radarDiagram.AxisX.WholeRange.MaxValue = 23;        //设置角度范围最大值radarDiagram.RotationDirection = RadarDiagramRotationDirection.Clockwise; //数据是顺时针还是逆时针// Add a title to the chart and hide the legend.ChartTitle chartTitle1 = new ChartTitle();chartTitle1.Text = "Radar Line Chart";RadarLineChart.Titles.Add(chartTitle1);RadarLineChart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.False;       //隐藏图例// Add the chart to the form.RadarLineChart.Dock = DockStyle.Fill;this.Controls.Add(RadarLineChart);// Populate the series with points.Random r = new Random((int)DateTime.Now.Ticks);r.NextDouble();for (int i = 0; i < seriesArr.Length; i++){for (int k = 0; k < points; k++){double yValue = 100 * r.NextDouble();pintValuesList[i].Add(new SeriesPoint(k * 24.0 / points, yValue));}seriesArr[i].Points.AddRange(pintValuesList[i].ToArray());seriesArr[i].LabelsVisibility = DevExpress.Utils.DefaultBoolean.False;      //隐藏数据点的标签显示}}}
}

运行效果图,如下:

在C#中使用DevExpress中的ChartControl实现极坐标图相关推荐

  1. 窗体内元素遍历-通用方法(DevExpress 中BarManager的遍历)

    窗体内元素遍历-通用方法(DevExpress 中BarManager的遍历) 需求:WinForm窗体中对于各个元素进行遍历设置. 本身因为程序绝大部分功能已经开发完毕,但是权限控制没有追加,在后续 ...

  2. Winform中设置DevExpress的RadioGroup的items从配置文件中加载

    场景 DevExpress的RadioGroup的items选项如果是不确定的话,需要其从配置文件中加载. 实现 在项目目录下新建Config文件夹,文件夹下新建xml配置文件. <?xml v ...

  3. Winform中使用DevExpress时给控件添加子控件的方法

    场景 在Winform中使用DevExpress时经常使用PanelControl控件用来进行布局设计,因此需要在代码中生成控件并添加子控件. 实现 一种是设置要添加的自控件的Parent属性为容器控 ...

  4. DevExpress 中 在做全选的全消功能的时候 加快效率

    DevExpress 中 在做全选的全消功能的时候 加快效率 在做 DevExpress 中对增加的选择 Check列 控制全选的全消时通过以下代码红色字代码效率会有明显的提升: private vo ...

  5. DevExpress中动态设置主题、皮肤

    一.实现效果 1.1.设置全局主题 1.2.设置单窗体主题 1.3.重置全局窗体主题 二.WinForm窗体主题.皮肤操作核心 /*** * Title:"数据采集" 项目 * 主 ...

  6. DevExpress中实现给GridControl下的GridView表格列设置是否可以编辑数据

    DevExpress中实现给GridView表格修改指定行.列的背景颜色和获取选择行的信息https://coffeemilk.blog.csdn.net/article/details/120146 ...

  7. C#中Winform程序中如何实现多维表头【不通过第三方报表程序】

    问题:C#中Winform程序中如何实现多维表头. 在网上搜了很多方法,大多数方法对于我这种新手,看的都不是很懂.最后在新浪博客看到了一篇比较易懂的文章:[DataGridView二维表头与合并单元格 ...

  8. 关于python缩进的描述中_关于Python程序中与“缩进”有关的说法中,以下选项中正确的是()...

    关于Python程序中与"缩进"有关的说法中,以下选项中正确的是() 答:缩进在程序中长度统一且强制使用 同文学或同音乐主题的民歌,<_______>是其中之一.此曲经 ...

  9. python中json dumps_python中json.loads,dumps,jsonify使用

    search_info = {'id':132,'user_role':3} print type(search_info) #输出 #转为string用dumps print type(json.d ...

  10. VS2010中“工具选项中的VC++目录编辑功能已被否决”解决方法

    http://blog.csdn.net/chaijunkun/article/details/6658923 这是VS2010的改变,不能够在"工具-选项"中看到"VC ...

最新文章

  1. weex 阶段总结
  2. 从脸部识别到火星机器人,正在改变世界的计算机视觉
  3. Java web.xml 配置详解
  4. Lambda表达式的使用
  5. /hbase/WALs/desktop,xxxxxxxx-splitting is non empty: Directory is not empty
  6. 解析Json需要设置Mime
  7. 声音就是你的武器!这样的攻防大赛你一定没有见过!
  8. @value取不到值_Bamboo window上环境变量 HOMEDRIVE 及 HOMEPATH 获取不到的问题
  9. loadrunner11 下载安装说明
  10. Vue SSR服务端渲染 vue预渲染
  11. 计算机视觉之混合图像(Hybrid)
  12. iOS 局域网内搜索硬件设备
  13. 最新Thinkphp仿素材火整站源码修复版 带很多文章
  14. PCL点云处理之三维向量夹角计算(四十九)
  15. 美团登录获取cookie
  16. 使用你的linux系统下载BT
  17. C语言dialog函数用法,DialogBox用法
  18. 想你所想,华为云桌面Workspace助你轻松办公
  19. 微信小程序radio单选框如何修改宽高及选中样式
  20. 浅谈面向对象与女娲造人

热门文章

  1. [网络安全自学篇] 二十三.基于机器学习的恶意请求识别及安全领域中的机器学习
  2. python语法详解大全_Python语法大全
  3. 学画画软件app推荐_【画画必备】让你成为大触的6款APP
  4. 用python海龟画一个三角形_海龟画笔---和孩子一起学python
  5. pe下bootice修复Linux引导,快启动pe工具之bootice引导修复工具使用教程
  6. Matlab来实现DDS功能
  7. 【光通信-2】多模单模区别/多模光纤颜色区分/光纤跳线头区分
  8. 梦幻星球社区APP源码 HYBBS的iApp社区源码
  9. IDEA创建JavaWeb项目
  10. 快速计算代码行小工具