LiveCharts.WPF堆叠柱状图实现方法
在 LiveCharts.WPF 中实现堆叠式柱状图(Stacked Column Chart)可通过以下步骤完成:
1. 安装 NuGet 包
确保已安装 LiveCharts.Wpf
包(最新版本推荐,以下代码基于 v1.x)
2. XAML 中添加命名空间
<Window
xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"/>
3. 创建堆叠柱状图
<lvc:CartesianChart>
<lvc:CartesianChart.Series>
<!-- 堆叠柱状图系列集合 -->
<lvc:StackedColumnSeries>
<!-- 第一个数据系列 -->
<lvc:StackedColumnSeries.Values>
<lvc:ChartValues<double> Values="10, 15, 12, 8"/>
</lvc:StackedColumnSeries.Values>
<lvc:StackedColumnSeries.Title>Series 1</lvc:StackedColumnSeries.Title>
</lvc:StackedColumnSeries>
<!-- 第二个数据系列 -->
<lvc:StackedColumnSeries>
<lvc:StackedColumnSeries.Values>
<lvc:ChartValues<double> Values="5, 8, 6, 10"/>
</lvc:StackedColumnSeries.Values>
<lvc:StackedColumnSeries.Title>Series 2</lvc:StackedColumnSeries.Title>
</lvc:StackedColumnSeries>
</lvc:CartesianChart.Series>
<!-- 设置X轴标签 -->
<lvc:CartesianChart.AxisX>
<lvc:Axis Labels="Jan, Feb, Mar, Apr"/>
</lvc:CartesianChart.AxisX>
<!-- 设置Y轴标题 -->
<lvc:CartesianChart.AxisY>
<lvc:Axis Title="Sales (k)"/>
</lvc:CartesianChart.AxisY>
</lvc:CartesianChart>
4. 代码后台动态绑定(推荐)
using LiveCharts;
using LiveCharts.Wpf;
public partial class MainWindow : Window
{
public SeriesCollection Series { get; set; }
public string[] Labels { get; set; }
public MainWindow()
{
InitializeComponent();
// 初始化数据
Series = new SeriesCollection
{
new StackedColumnSeries
{
Title = "Product A",
Values = new ChartValues<double> { 10, 15, 12, 8 }
},
new StackedColumnSeries
{
Title = "Product B",
Values = new ChartValues<double> { 5, 8, 6, 10 }
}
};
Labels = new[] { "Jan", "Feb", "Mar", "Apr" };
DataContext = this; // 设置数据上下文
}
}
XAML 绑定版本
<lvc:CartesianChart Series="{Binding Series}">
<lvc:CartesianChart.AxisX>
<lvc:Axis Labels="{Binding Labels}"/>
</lvc:CartesianChart.AxisX>
</lvc:CartesianChart>
关键特性说明
-
堆叠原理:
- 每个
StackedColumnSeries
代表一组数据 - 相同索引的值会自动垂直堆叠(如 Jan: 10 + 5 = 15)
- 每个
-
自定义选项:
// 设置堆叠模式(默认已启用堆叠) var series = new StackedColumnSeries { StackMode = StackMode.Values // 或 StackMode.Percentage };
-
样式定制:
<lvc:StackedColumnSeries> <lvc:StackedColumnSeries.Fill> <!-- 填充颜色 --> <SolidColorBrush Color="#FF3399"/> </lvc:StackedColumnSeries.Fill> <lvc:StackedColumnSeries.DataLabels> <!-- 显示数值 --> <lvc:DataLabelSeries Position="Top"/> </lvc:StackedColumnSeries.DataLabels> </lvc:StackedColumnSeries>
效果说明
- 将生成 4 个柱形(Jan, Feb, Mar, Apr)
- 每个柱形由两个部分组成(Product A 和 Product B)
- 柱形总高度 = 各部分数值之和(如 Jan 柱高度 = 10 + 5 = 15)
常见问题解决
-
数据不堆叠:
- 检查是否使用了正确的
StackedColumnSeries
(非普通ColumnSeries
) - 确认所有系列都在同一个
SeriesCollection
中
- 检查是否使用了正确的
-
动态更新数据:
// 更新第一个系列的数据 Series[0].Values = new ChartValues<double> { 12, 14, 10, 15 }; // 添加新系列 Series.Add(new StackedColumnSeries { Values = new ChartValues<double> { 3, 4, 2, 5 } });
-
百分比堆叠:
foreach (var series in Series.Cast<StackedColumnSeries>()) { series.StackMode = StackMode.Percentage; }
完整示例项目可参考 LiveCharts 官方示例 中的 WinFormsSample
或 WpfSample
项目。
其他文章