在 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>

关键特性说明

  1. 堆叠原理

    • 每个 StackedColumnSeries 代表一组数据
    • 相同索引的值会自动垂直堆叠(如 Jan: 10 + 5 = 15)
  2. 自定义选项

    // 设置堆叠模式(默认已启用堆叠)
    var series = new StackedColumnSeries {
        StackMode = StackMode.Values // 或 StackMode.Percentage
    };
    
  3. 样式定制

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

常见问题解决

  1. 数据不堆叠

    • 检查是否使用了正确的 StackedColumnSeries(非普通 ColumnSeries
    • 确认所有系列都在同一个 SeriesCollection
  2. 动态更新数据

    // 更新第一个系列的数据
    Series[0].Values = new ChartValues<double> { 12, 14, 10, 15 };
    
    // 添加新系列
    Series.Add(new StackedColumnSeries {
        Values = new ChartValues<double> { 3, 4, 2, 5 }
    });
    
  3. 百分比堆叠

    foreach (var series in Series.Cast<StackedColumnSeries>())
    {
        series.StackMode = StackMode.Percentage;
    }
    

完整示例项目可参考 LiveCharts 官方示例 中的 WinFormsSampleWpfSample 项目。