如何在VB.NET Chart中为同系列的每个条形图设置单独颜色
在VB.NET Chart同系列中为每个条形图设置单独随机颜色的实现方案
需求:在VB.NET Chart控件的同系列中,为每个条形图设置单独的随机颜色,实现每个Y值条形图颜色不同的效果。以下是原LoadChart4代码:
Sub LoadChart4() With Chart4 .Series.Clear() .Series.Add("Series1") End With Dim da As New SqlDataAdapter("SELECT gt, COUNT(*) as total FROM tblStatus WHERE month(sdate) = month(getdate()) AND year(sdate) = year(getdate()) group by gt", cn) Dim ds As New DataSet da.Fill(ds, "Gt") Chart4.DataSource = ds.Tables("Gt") Dim series1 As Series = Chart4.Series("Series1") series1.ChartType = SeriesChartType.StackedBar series1.Name = "GT" With Chart4 .Series(series1.Name).XValueMember = "Gt" .Series(series1.Name).YValueMembers = "total" .ChartAreas(0).AxisX.LabelStyle.Format = "MMMM" .Series(0).IsValueShownAsLabel = True .ChartAreas(0).AxisX.Title = DateTime.Now.ToString("MMMM) End With End Sub
实现思路与修改代码
核心逻辑是为系列内的每个DataPoint单独设置颜色,具体步骤:
- 关闭系列自动调色板,避免覆盖自定义颜色
- 遍历所有数据点,为每个点生成随机RGB颜色并赋值
修改后的完整代码:
Sub LoadChart4() With Chart4 .Series.Clear() .Series.Add("Series1") End With Dim da As New SqlDataAdapter("SELECT gt, COUNT(*) as total FROM tblStatus WHERE month(sdate) = month(getdate()) AND year(sdate) = year(getdate()) group by gt", cn) Dim ds As New DataSet da.Fill(ds, "Gt") Chart4.DataSource = ds.Tables("Gt") Dim series1 As Series = Chart4.Series("Series1") series1.ChartType = SeriesChartType.StackedBar series1.Name = "GT" With Chart4 .Series(series1.Name).XValueMember = "Gt" .Series(series1.Name).YValueMembers = "total" .ChartAreas(0).AxisX.LabelStyle.Format = "MMMM" .Series(0).IsValueShownAsLabel = True .ChartAreas(0).AxisX.Title = DateTime.Now.ToString("MMMM") ' 修复原代码引号未闭合问题 End With ' 自定义随机颜色设置 series1.Palette = ChartColorPalette.None ' 禁用自动调色板 Dim randomColor As New Random() ' 遍历每个数据点,设置随机颜色 For Each dp As DataPoint In series1.Points dp.Color = Color.FromArgb(randomColor.Next(256), randomColor.Next(256), randomColor.Next(256)) Next End Sub
关键说明
series1.Palette = ChartColorPalette.None:必须禁用自动调色板,否则自定义颜色会被控件默认配色覆盖Color.FromArgb(randomColor.Next(256), ...):通过Random类生成0-255的RGB随机值,生成随机颜色- 遍历
series1.Points:每个DataPoint对应一个条形图,单独设置Color属性即可实现每个条形颜色独立
内容的提问来源于stack exchange,提问作者ratheesh k
相关产品推荐
相关产品推荐

