C# 怎么做chat柱状图能实现不同的颜色,还带游标
1:最近做一个项目,需要用到chat图表应用,需要显示柱状图,但是每一个柱状图需要不同的颜色,还要显示多个游标
2:网上找了半天,没有类似的,自己动手做一个~
3:上效果图:
是不是还可以,下面完整的解析下代码:
(1):直接动态生成
//定义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):添加图表区域:图表的数据都是在这里添加进去的
// 添加图表区域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): 添加柱状图系列,这里就生成数据,然后 绑定
// 添加柱状图系列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):设置轴标签
// 设置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):设置游标,这里设置了两个
// 创建第一个游标(红色)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):最终将控件加载到窗体显示
// 将图表添加到窗体this.Controls.Add(chart);
*有一个生成随机颜色的中间函数
private Color GetRandomColor(){return Color.FromArgb(random.Next(50, 200), random.Next(50, 200), random.Next(50, 200));}