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

 更新时间:2022年02月21日 11:39:42   作者:CodingPioneer  
这篇文章主要介绍了在C#中使用DevExpress中的ChartControl实现极坐标图,本案例是使用的是DevExpress 18.1.3版本,之前在14版本上也试过,但是有一个弊端就是实现极坐标图的时候,第一个点和最后一个点总是自动多一条闭合线,会形成一个闭合的多边形,因此升级了一下版

背景

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

在这里插入图片描述

实现思路

通常简单的做法是使用图表控件实现,常用的图表控件有开源的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实现极坐标图的文章就介绍到这了,更多相关C# ChartControl极坐标图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C# 获取指定QQ头像绘制圆形头像框GDI(Graphics)的方法

    C# 获取指定QQ头像绘制圆形头像框GDI(Graphics)的方法

    某论坛的评论区模块,发现这功能很不错,琢磨了一晚上做了大致一样的,用来当做 注册模块 的头像绑定功能,下面通过实例代码给大家介绍下C# 获取指定QQ头像绘制圆形头像框GDI(Graphics)的方法,感兴趣的朋友一起看看吧
    2021-11-11
  • C#调用新浪微博API实例代码

    C#调用新浪微博API实例代码

    在本篇文章里小编给大家整理的是一篇关于C#调用微博API的相关知识点内容,有需要的朋友们可以学习下。
    2019-11-11
  • c#中如何去除字符串左边的0

    c#中如何去除字符串左边的0

    这篇文章主要介绍了c#中如何去除字符串左边的0问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • C#/.net程序调用Python的教程分享

    C#/.net程序调用Python的教程分享

    C#的优势在于window下的开发,不仅功能强大而且开发周期短。而python则有众多的第三方库,可以避免自己造轮子,利用C#来做界面,而具体实现使用python来实现可以大大提高开发效率。本文介绍如何使用pythonnet来执行python脚本,希望对大家有所帮助
    2023-03-03
  • .NET MemoryCache如何清除全部缓存

    .NET MemoryCache如何清除全部缓存

    本文主要介绍了.NET MemoryCache如何清除全部缓存,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • 浅谈C#.NET、JavaScript和JSON

    浅谈C#.NET、JavaScript和JSON

    本文介绍了C#.NET、JavaScript和JSON的相关知识,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • C#实现顺序队列和链队列的代码实例

    C#实现顺序队列和链队列的代码实例

    今天小编就为大家分享一篇关于C#实现顺序队列和链队列的代码实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • C#序列化与反序列化(Serialize,Deserialize)实例详解

    C#序列化与反序列化(Serialize,Deserialize)实例详解

    这篇文章主要介绍了C#序列化与反序列化(Serialize,Deserialize)的方法,实例分析了C#序列化与反序列化的常见技巧,需要的朋友可以参考下
    2015-06-06
  • 深入解析C#编程中泛型委托的使用

    深入解析C#编程中泛型委托的使用

    这篇文章主要介绍了C#编程中泛型委托的使用,引用泛型委托的代码可以指定类型参数以创建已关闭的构造类型,需要的朋友可以参考下
    2016-02-02
  • C#计算输入汉字GBK编码后十六进制数输出的方法

    C#计算输入汉字GBK编码后十六进制数输出的方法

    这篇文章主要介绍了C#计算输入汉字GBK编码后十六进制数输出的方法,涉及C#编码操作相关技巧,需要的朋友可以参考下
    2015-04-04

最新评论