C#中使用DevExpress中的ChartControl实现极坐标图的案例详解

作者:CodingPioneer 时间:2022-12-05 06:30:39 

背景

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

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);      //使用雷达折线图实例化Series

RadarLineSeriesView 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实现极坐标图的案例详解

来源:https://blog.csdn.net/zlbdmm/article/details/122982729

标签:C#,DevExpress,ChartControl,极坐标图
0
投稿

猜你喜欢

  • Android ListView ImageView实现单选按钮实例

    2023-09-19 20:25:39
  • java结合keytool如何实现非对称签名和验证详解

    2021-12-21 21:49:35
  • C#使用WebClient登录网站并抓取登录后的网页信息实现方法

    2022-05-19 10:43:24
  • 基于多网卡环境下Eureka服务注册IP的选择问题

    2022-09-16 17:59:15
  • Android之禁止ViewPager滑动实现实例

    2022-03-17 23:55:40
  • c#保存窗口位置大小操作类(序列化和文件读写功能)

    2023-07-15 18:51:06
  • Android开发RecyclerView实现折线图效果

    2022-08-27 12:59:34
  • 一篇文章带你了解Java容器,面板及四大布局管理器应用

    2022-12-18 04:16:38
  • 微信开发之使用java获取签名signature

    2022-08-01 10:47:01
  • 详解Android Activity中的几种监听器和实现方式

    2022-11-02 11:26:05
  • C#如何Task执行任务,等待任务完成

    2022-03-06 11:31:31
  • MAC配置java+jmeter环境变量过程解析

    2021-09-30 00:16:23
  • Java+MySQL实现学生信息管理系统源码

    2023-11-28 04:29:31
  • mall整合SpringTask实现定时任务的方法示例

    2023-09-15 18:08:08
  • Spring boot外部配置(配置中心化)详解

    2022-07-11 23:13:26
  • Android自定义ViewPager实例

    2023-03-11 10:24:50
  • Java解析xml文件遇到特殊符号异常的情况(处理方案)

    2023-10-23 17:31:48
  • C# 调用腾讯即时通信 IM的示例

    2021-10-29 16:31:17
  • SpringMvc框架的简介与执行流程详解

    2022-10-15 18:49:00
  • Android提高之BLE开发Android手机搜索iBeacon基站

    2023-05-19 18:58:15
  • asp之家 软件编程 m.aspxhome.com