导读:本期聚焦于小伙伴创作的《C#怎么动态生成各类图表?C#如何使用LiveCharts库实战》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#怎么动态生成各类图表?C#如何使用LiveCharts库实战》有用,将其分享出去将是对创作者最好的鼓励。

在C#桌面应用或Web应用开发中,动态生成图表是数据展示的常见需求,LiveCharts作为轻量且功能丰富的图表库,提供了简单易用的API,可快速实现多种图表的动态渲染与更新。本文将以WPF平台为例,演示如何使用LiveCharts动态生成折线图、柱状图和饼图。

C#怎么动态生成各类图表?C#如何使用LiveCharts库实战

环境准备

首先需要在项目中安装LiveCharts相关的NuGet包,打开NuGet包管理器,搜索并安装以下两个包:

  • LiveCharts
  • LiveCharts.Wpf

基础配置

在WPF的XAML文件中,需要先引入LiveCharts的命名空间,然后添加一个图表容器,这里以CartesianChart为例,用于承载折线图和柱状图:

<Window x:Class="LiveChartsDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"
        Title="LiveCharts动态图表实战" Height="450" Width="800">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <StackPanel Grid.Row="0" Orientation="Horizontal" Margin="10">
            <Button x:Name="btnLine" Content="生成折线图" Margin="5" Click="btnLine_Click"/>
            <Button x:Name="btnBar" Content="生成柱状图" Margin="5" Click="btnBar_Click"/>
            <Button x:Name="btnPie" Content="生成饼图" Margin="5" Click="btnPie_Click"/>
            <Button x:Name="btnUpdate" Content="更新数据" Margin="5" Click="btnUpdate_Click"/>
        </StackPanel>
        <lvc:CartesianChart x:Name="cartesianChart" Grid.Row="1" Margin="10"/>
        <lvc:PieChart x:Name="pieChart" Grid.Row="1" Margin="10" Visibility="Collapsed"/>
        <TextBlock Grid.Row="2" Margin="10" Text="点击上方按钮切换图表类型,点击更新数据可刷新当前图表内容"/>
    </Grid>
</Window>

动态生成折线图

折线图适合展示数据随时间或序号的变化趋势,下面的代码实现点击按钮后生成动态折线图:

using LiveCharts;
using LiveCharts.Wpf;
using System.Windows;
using System.Windows.Media;

namespace LiveChartsDemo
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        // 生成折线图
        private void btnLine_Click(object sender, RoutedEventArgs e)
        {
            // 显示笛卡尔图表,隐藏饼图
            cartesianChart.Visibility = Visibility.Visible;
            pieChart.Visibility = Visibility.Collapsed;

            // 模拟折线图数据,X轴为1-10的序号,Y轴为随机数值
            var lineValues = new ChartValues<double>();
            var xLabels = new string[10];
            var random = new System.Random();
            for (int i = 0; i < 10; i++)
            {
                lineValues.Add(random.Next(10, 100));
                xLabels[i] = $"第{i + 1}项";
            }

            // 配置折线图系列
            var lineSeries = new LineSeries
            {
                Title = "销量趋势",
                Values = lineValues,
                PointGeometry = DefaultGeometries.Circle,
                PointGeometrySize = 10,
                LineSmoothness = 0.5,
                Stroke = Brushes.DodgerBlue,
                Fill = Brushes.Transparent
            };

            // 设置图表属性
            cartesianChart.Series = new SeriesCollection { lineSeries };
            cartesianChart.AxisX.Clear();
            cartesianChart.AxisX.Add(new Axis
            {
                Title = "统计项",
                Labels = xLabels
            });
            cartesianChart.AxisY.Clear();
            cartesianChart.AxisY.Add(new Axis
            {
                Title = "数值",
                MinValue = 0
            });
        }
    }
}

动态生成柱状图

柱状图适合对比不同类别数据的大小,实现逻辑与折线图类似,仅需要调整系列类型和样式:

// 生成柱状图
private void btnBar_Click(object sender, RoutedEventArgs e)
{
    // 显示笛卡尔图表,隐藏饼图
    cartesianChart.Visibility = Visibility.Visible;
    pieChart.Visibility = Visibility.Collapsed;

    // 模拟柱状图数据
    var barValues = new ChartValues<double>();
    var xLabels = new string[6];
    var random = new System.Random();
    for (int i = 0; i < 6; i++)
    {
        barValues.Add(random.Next(20, 90));
        xLabels[i] = $"类别{i + 1}";
    }

    // 配置柱状图系列
    var barSeries = new ColumnSeries
    {
        Title = "类别数值",
        Values = barValues,
        Fill = Brushes.Orange,
        StrokeThickness = 0
    };

    // 设置图表属性
    cartesianChart.Series = new SeriesCollection { barSeries };
    cartesianChart.AxisX.Clear();
    cartesianChart.AxisX.Add(new Axis
    {
        Title = "类别",
        Labels = xLabels
    });
    cartesianChart.AxisY.Clear();
    cartesianChart.AxisY.Add(new Axis
    {
        Title = "数值",
        MinValue = 0
    });
}

动态生成饼图

饼图适合展示各部分数据占总体的比例,需要使用PieChart控件:

// 生成饼图
private void btnPie_Click(object sender, RoutedEventArgs e)
{
    // 隐藏笛卡尔图表,显示饼图
    cartesianChart.Visibility = Visibility.Collapsed;
    pieChart.Visibility = Visibility.Visible;

    // 模拟饼图数据
    var pieValues = new ChartValues<double>();
    var random = new System.Random();
    for (int i = 0; i < 4; i++)
    {
        pieValues.Add(random.Next(10, 50));
    }

    // 配置饼图系列
    var pieSeries = new PieSeries
    {
        Title = "占比",
        Values = pieValues,
        DataLabels = true,
        LabelPoint = chartPoint => $"{chartPoint.Y} ({chartPoint.Participation:P2})"
    };

    // 设置饼图属性
    pieChart.Series = new SeriesCollection { pieSeries };
    pieChart.LegendLocation = LegendLocation.Right;
}

动态更新图表数据

LiveCharts的ChartValues实现了INotifyPropertyChanged接口,修改集合中的数据会自动刷新图表,实现动态更新:

// 更新当前图表数据
private void btnUpdate_Click(object sender, RoutedEventArgs e)
{
    var random = new System.Random();
    if (cartesianChart.Visibility == Visibility.Visible)
    {
        // 更新笛卡尔图表数据
        if (cartesianChart.Series.Count > 0)
        {
            var series = cartesianChart.Series[0];
            if (series.Values is ChartValues<double> values)
            {
                for (int i = 0; i < values.Count; i++)
                {
                    values[i] = random.Next(10, 100);
                }
            }
        }
    }
    else if (pieChart.Visibility == Visibility.Visible)
    {
        // 更新饼图数据
        if (pieChart.Series.Count > 0)
        {
            var series = pieChart.Series[0];
            if (series.Values is ChartValues<double> values)
            {
                for (int i = 0; i < values.Count; i++)
                {
                    values[i] = random.Next(10, 50);
                }
            }
        }
    }
}

注意事项

  • 如果需要展示大量实时数据,建议限制ChartValues的长度,避免内存占用过高
  • 可以通过修改系列的FillStroke等属性自定义图表颜色样式
  • 如果需要支持触摸交互,可以开启LiveCharts内置的缩放、平移功能

C#LiveCharts动态图表数据可视化修改时间:2026-06-19 07:06:29

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。