当前位置: 首页 > article >正文

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);
}

运行效果


http://www.kler.cn/a/299637.html

相关文章:

  • 大数据学习之Kafka消息队列、Spark分布式计算框架一
  • Linux二进制部署K8s集群的平滑升级教程
  • 大模型知识蒸馏技术(2)——蒸馏技术发展简史
  • 基于Python的人工智能患者风险评估预测模型构建与应用研究(下)
  • ping命令详解Type 8和0 或者Type 3
  • SSM-MyBatis-总结
  • 居然还有人不懂强引用、弱引用与软引用
  • svn常见错误及解决办法
  • 「豆包 Marscode 体验官」AI 加持的云端 IDE——三种方法高效开发前后端聊天交互功能
  • spring ai整合ollama anythingllm
  • webpack+lite-server 构建项目示例
  • 二百六十三、Java——IDEA项目打成jar包,然后在Linux中运行
  • 智能交通(四)——CMC特刊推荐
  • C#Bitmap和Image之间的关系
  • 线性代数基础:向量、矩阵、张量及其在机器学习中的应用详解
  • C++——矩阵无重复行列取数问题
  • 游戏出海迎新变局——海外游戏市场有哪些新趋势和新机遇?
  • SAP自动付款和自动付款常见错误解决方案
  • SAP ABAP选择屏幕(ACTIVE,INPUT,REQUIRED)
  • 说一下解除docker限制内存警告
  • 基于SpringBoot+Vue+MySQL的房屋租赁管理系统
  • 深入理解TCP三次握手
  • A题 农村公交与异构无人机协同配送优化
  • 2024年【汽车驾驶员(技师)】考试题及汽车驾驶员(技师)找解析
  • Docker 实战:快速安装 Nginx、Redis、MySQL 等常用软件
  • 通过Docker部署 MongoDB 服务器