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