服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C#中使用DevExpress中的ChartControl实现极坐标图的案例详解

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

2023-02-09 15:26CodingPioneer C#

这篇文章主要介绍了在C#中使用DevExpress中的ChartControl实现极坐标图,本案例是使用的是DevExpress 18.1.3版本,之前在14版本上也试过,但是有一个弊端就是实现极坐标图的时候,第一个点和最后一个点总是自动多一条闭合线,会形成一个

背景

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

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

到此这篇关于在C#中使用DevExpress中的ChartControl实现极坐标图的文章就介绍到这了,更多相关C# ChartControl极坐标图内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/zlbdmm/article/details/122982729

延伸 · 阅读

精彩推荐
  • C#C#变量命名规则小结

    C#变量命名规则小结

    本文主要介绍了C#变量命名规则小结,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    zx9222022-12-02
  • C#如何利用Jenkins + TFS为.Net Core实现持续集成/部署详解

    如何利用Jenkins + TFS为.Net Core实现持续集成/部署详解

    这篇文章主要给大家介绍了关于如何利用Jenkins + TFS为.Net Core实现持续集成/部署的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具...

    myzony4402022-02-23
  • C#Unity Shader模拟玻璃效果

    Unity Shader模拟玻璃效果

    这篇文章主要为大家详细介绍了Unity Shader模拟玻璃效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Zok937462022-09-06
  • C#C#简单查询SQLite数据库是否存在数据的方法

    C#简单查询SQLite数据库是否存在数据的方法

    这篇文章主要介绍了C#简单查询SQLite数据库是否存在数据的方法,涉及C#调用SQLite组件及针对SQLite数据库基本的连接、查询、关闭等使用技巧,需要的朋友可以...

    IT部落格9572021-11-29
  • C#浅析c#中如何在form的webbrowser控件中获得鼠标坐标

    浅析c#中如何在form的webbrowser控件中获得鼠标坐标

    以下是对c#中如何在form的webbrowser控件中获得鼠标坐标的实现方法进行了详细的分析介绍,需要的朋友可以参考下...

    C#教程网2972020-12-21
  • C#C#使用TextBox作数据输入方法

    C#使用TextBox作数据输入方法

    笔者最近需要上位机与下位机进行数据交互,在广泛参考大佬的资料后,较为完善地使用Textbox控件进行数据输入的功能。感兴趣的可以了解一下...

    怪都督8452022-11-21
  • C#C#仿Windows XP自带的扫雷游戏

    C#仿Windows XP自带的扫雷游戏

    这篇文章主要为大家详细介绍了C#仿Windows XP自带的扫雷游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    敲代码两年半的练习生11362022-11-16
  • C#Unity实现手机摇一摇震动

    Unity实现手机摇一摇震动

    这篇文章主要为大家详细介绍了untiy实现手机摇一摇震动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    liang_7049597218662022-08-09