C#中chart绘制曲线

2024-09-04 10:36
文章标签 c# 绘制 .net 曲线 netcore chart

本文主要是介绍C#中chart绘制曲线,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

官网资料:Chart 类 (System.Windows.Forms.DataVisualization.Charting) | Microsoft Learn

类的 Chart 两个重要属性是 Series 和 ChartAreas 属性,这两个属性都是集合属性。 Series集合属性存储Series对象,这些对象用于存储要显示的数据以及该数据的属性。 ChartAreas集合属性存储ChartArea对象,这些对象主要用于使用一组轴绘制一个或多个图表。

图标中集合的作用

主要包含:Annotations(获取并设置存储图标注释的集合)、ChartAreas(获取用于存储 ChartAreaCollection 对象的只读 ChartArea 对象)、Legends(获取或设置LegendCollection, 其存储所有用于 Legend 控件的 Chart 对象)、Series(显示数据获取一个 SeriesCollection 对象,该对象包含 Series 对象)、Titles

遇到的bug

  • 将数据绑定在chart数据源上,更改DataCount,就更改了数据源。
int DataCount = 0;
chart1.Series[0].Points.DataBindY(DataPanel[DataCount]);
  • 给chart控件添加滚动条
private void ChartScrollbarStyle(){        chartAmend.ChartAreas[0].AxisX.ScrollBar.Enabled = true;chartAmend.ChartAreas[0].AxisX.ScaleView.Position = 1;chartAmend.ChartAreas[0].AxisX.ScaleView.Size = 300;chartAmend.ChartAreas[0].AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.SmallScroll;chartAmend.ChartAreas[0].AxisX.ScrollBar.ButtonColor = Color.Silver;chartAmend.ChartAreas[0].AxisX.ScrollBar.LineColor = Color.Black;chartAmend.ChartAreas[0].AxisX.ScrollBar.IsPositionedInside = false;
}
  • X轴显示为时间
    • 设置数据类型为Time
    •  数据添加时,X是时间
string time = DateTime.Now.ToString("HH:mm:ss:fff");        // 获取时间,yyyy-MM-dd HH:mm:ss:ffff
chart1.Series[x].Points.AddXY(time, data.Y);                // 添加显示数据
  • 界面中显示添加数据y值
    • 在添加数的函数值中设置显示属性为true
chart1.Series[0].IsValueShownAsLabel = true;
  • 绘制直线用于指引最大值,最小值等
// 如果interval不设置为0,则y轴间隔这个数值会有一条线,设置为0后则只有offset的一条线
ChartArea chartArea = chart.ChartAreas[0];
StripLine stripLine = new StripLine();
stripLine.Interval = 0; // 例如,你想在Y=50的位置画线
stripLine.IntervalOffset = 11;
stripLine.StripWidth = 0.15; // 设置宽度为很小的值以模拟直线  
stripLine.Text = name;
stripLine.BackColor = Color.Red; // 设置线的颜色  
chartArea.AxisY.StripLines.Add(stripLine);

应用完整代码

/// <summary>
/// 添加显示最大值、最小值、平均值
/// </summary>
/// <param name="chart"></param>
/// <param name="series"></param>
/// <param name="showMax"></param>
/// <param name="showMin"></param>
/// <param name="showAverage"></param>
void SetupChartStripLine(Chart chart, Series series, bool showMax = true, bool showMin = true, bool showAverage = true)
{if (chart == null || series == null)return;double maxValue = series.Points.FindMaxByValue().YValues[0];double minValue = series.Points.FindMinByValue().YValues[0];double sum = 0;foreach (var point in series.Points){sum += point.YValues[0];}double averageValue = sum / series.Points.Count;// 定义一个 Action<string> 委托,它引用了一个接受字符串参数的方法  Action<string, double> myAction = (name, value) =>{ChartArea chartArea = chart.ChartAreas[0];StripLine stripLine = new StripLine();stripLine.Interval = 0; // 例如,你想在Y=50的位置画线  stripLine.IntervalOffset = value;stripLine.StripWidth = 0.08; // 设置宽度为很小的值以模拟直线  stripLine.BackColor = Color.Red; // 设置线的颜色stripLine.Text = name;chartArea.AxisY.StripLines.Add(stripLine);};// 调用传入的 Action<string> 委托,并传入一个字符串参数  if (showMax)myAction?.Invoke("最大值:" + maxValue, maxValue); // 使用?.是为了避免在action为null时引发异常if (showMin)myAction?.Invoke("最小值:" + minValue, minValue);if (showAverage)myAction?.Invoke("平均值:" + averageValue, averageValue);
}

运行效果

这篇关于C#中chart绘制曲线的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1135777

相关文章

一文解析C#中的StringSplitOptions枚举

《一文解析C#中的StringSplitOptions枚举》StringSplitOptions是C#中的一个枚举类型,用于控制string.Split()方法分割字符串时的行为,核心作用是处理分割后... 目录C#的StringSplitOptions枚举1.StringSplitOptions枚举的常用

C#自动化实现检测并删除PDF文件中的空白页面

《C#自动化实现检测并删除PDF文件中的空白页面》PDF文档在日常工作和生活中扮演着重要的角色,本文将深入探讨如何使用C#编程语言,结合强大的PDF处理库,自动化地检测并删除PDF文件中的空白页面,感... 目录理解PDF空白页的定义与挑战引入Spire.PDF for .NET库核心实现:检测并删除空白页

C#利用Free Spire.XLS for .NET复制Excel工作表

《C#利用FreeSpire.XLSfor.NET复制Excel工作表》在日常的.NET开发中,我们经常需要操作Excel文件,本文将详细介绍C#如何使用FreeSpire.XLSfor.NET... 目录1. 环境准备2. 核心功能3. android示例代码3.1 在同一工作簿内复制工作表3.2 在不同

Python绘制TSP、VRP问题求解结果图全过程

《Python绘制TSP、VRP问题求解结果图全过程》本文介绍用Python绘制TSP和VRP问题的静态与动态结果图,静态图展示路径,动态图通过matplotlib.animation模块实现动画效果... 目录一、静态图二、动态图总结【代码】python绘制TSP、VRP问题求解结果图(包含静态图与动态图

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

C#使用iText获取PDF的trailer数据的代码示例

《C#使用iText获取PDF的trailer数据的代码示例》开发程序debug的时候,看到了PDF有个trailer数据,挺有意思,于是考虑用代码把它读出来,那么就用到我们常用的iText框架了,所... 目录引言iText 核心概念C# 代码示例步骤 1: 确保已安装 iText步骤 2: C# 代码程

C#实现高性能拍照与水印添加功能完整方案

《C#实现高性能拍照与水印添加功能完整方案》在工业检测、质量追溯等应用场景中,经常需要对产品进行拍照并添加相关信息水印,本文将详细介绍如何使用C#实现一个高性能的拍照和水印添加功能,包含完整的代码实现... 目录1. 概述2. 功能架构设计3. 核心代码实现python3.1 主拍照方法3.2 安全HBIT

C#实现SHP文件读取与地图显示的完整教程

《C#实现SHP文件读取与地图显示的完整教程》在地理信息系统(GIS)开发中,SHP文件是一种常见的矢量数据格式,本文将详细介绍如何使用C#读取SHP文件并实现地图显示功能,包括坐标转换、图形渲染、平... 目录概述功能特点核心代码解析1. 文件读取与初始化2. 坐标转换3. 图形绘制4. 地图交互功能缩放

C#使用SendMessage实现进程间通信的示例代码

《C#使用SendMessage实现进程间通信的示例代码》在软件开发中,进程间通信(IPC)是关键技术之一,C#通过调用WindowsAPI的SendMessage函数实现这一功能,本文将通过实例介绍... 目录第一章:SendMessage的底层原理揭秘第二章:构建跨进程通信桥梁2.1 定义通信协议2.2

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很