C# 怎么做chat柱状图能实现不同的颜色,还带游标

1:最近做一个项目,需要用到chat图表应用,需要显示柱状图,但是每一个柱状图需要不同的颜色,还要显示多个游标

2:网上找了半天,没有类似的,自己动手做一个~

3:上效果图:

是不是还可以,下面完整的解析下代码:

(1):直接动态生成

cs 复制代码
//定义chat对象以及游标
  private Chart chart;
  private VerticalLineAnnotation cursor1;
  private VerticalLineAnnotation cursor2;
  private TextAnnotation diffAnnotation;
  private Random random = new Random(); 

//动态生成chat控件
 chart = new Chart();
 chart.Dock = DockStyle.Fill;
 chart.BackColor = Color.White;
 chart.BorderlineColor = Color.Gray;
 chart.BorderlineDashStyle = ChartDashStyle.Solid;
 chart.BorderlineWidth = 1;

(2):添加图表区域:图表的数据都是在这里添加进去的

cs 复制代码
    // 添加图表区域
    ChartArea chartArea = new ChartArea("MainArea");
    chartArea.BackColor = Color.WhiteSmoke;
    chartArea.AxisX.Title = "类别";
    chartArea.AxisY.Title = "数值";
    chartArea.AxisX.MajorGrid.LineColor = Color.LightGray;
    chartArea.AxisY.MajorGrid.LineColor = Color.LightGray;
    chart.ChartAreas.Add(chartArea);

(3): 添加柱状图系列,这里就生成数据,然后 绑定

cs 复制代码
  // 添加柱状图系列
  Series barSeries = new Series("柱状图数据");
  barSeries.ChartType = SeriesChartType.Column;
  barSeries.BorderWidth = 1;
  barSeries.BorderColor = Color.Black;

  // 添加10个随机数据的柱子,每个柱子不同颜色
  string[] categories = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J" };
  for (int i = 0; i < 10; i++)
  {
      int value = random.Next(20, 100);
      DataPoint point = new DataPoint(i, value);
      point.Color = GetRandomColor();
      point.Label = value.ToString();
      point.Font = new Font("Arial", 8, FontStyle.Bold);
      point.LabelForeColor = Color.Black;
      barSeries.Points.Add(point);
  }

  chart.Series.Add(barSeries);

(4):设置轴标签

cs 复制代码
 // 设置X轴标签 
chartArea.AxisX.Interval = 1;
 chartArea.AxisX.LabelStyle.Angle = -45;
 for (int i = 0; i < categories.Length; i++)
 {
     barSeries.Points[i].AxisLabel = categories[i];
 }

(5):设置游标,这里设置了两个

cs 复制代码
            // 创建第一个游标(红色)
            cursor1 = new VerticalLineAnnotation
            {
                Name = "Cursor1",
                AxisX = chartArea.AxisX,
                X = 3, // 初始位置在第4个柱子(D)中间
                IsInfinitive = true,
                LineColor = Color.Red,
                LineWidth = 2,
                ClipToChartArea = chartArea.Name,
                AllowMoving = true,
                IsSizeAlwaysRelative = false,
                AnchorY = chartArea.AxisY.Maximum // 确保游标从顶部开始
            };
            chart.Annotations.Add(cursor1);

            // 创建第二个游标(蓝色)
            cursor2 = new VerticalLineAnnotation
            {
                Name = "Cursor2",
                AxisX = chartArea.AxisX,
                X = 7, // 初始位置在第8个柱子(H)中间
                IsInfinitive = true,
                LineColor = Color.Blue,
                LineWidth = 2,
                ClipToChartArea = chartArea.Name,
                AllowMoving = true,
                IsSizeAlwaysRelative = false,
                AnchorY = chartArea.AxisY.Maximum // 确保游标从顶部开始
            };
            chart.Annotations.Add(cursor2);

(6):最终将控件加载到窗体显示

cs 复制代码
   // 将图表添加到窗体
   this.Controls.Add(chart);

*有一个生成随机颜色的中间函数

cs 复制代码
        private Color GetRandomColor()
        {
            return Color.FromArgb(random.Next(50, 200), random.Next(50, 200), random.Next(50, 200));
        }
相关推荐
honder试试2 小时前
焊接自动化测试平台图像处理分析-模型训练推理
开发语言·python
^Rocky2 小时前
JavaScript性能优化实战
开发语言·javascript·性能优化
ponnylv2 小时前
深入剖析Spring Boot启动流程
java·开发语言·spring boot·spring
萧邀人2 小时前
第一课、Cocos Creator 3.8 安装与配置
开发语言
Jayden_Ruan3 小时前
C++逆向输出一个字符串(三)
开发语言·c++·算法
不吃鱼的羊3 小时前
启动文件Startup_vle.c
c语言·开发语言
VBA63374 小时前
VBA之Word应用第四章第二节:段落集合Paragraphs对象(二)
开发语言
点云SLAM4 小时前
C++ 常见面试题汇总
java·开发语言·c++·算法·面试·内存管理
xiaowu0805 小时前
策略模式-不同的鸭子的案例
开发语言·c#·策略模式
edjxj5 小时前
Qt图片资源导入
开发语言·qt