wpf顯示數據圖表(livecharts2)

wpf顯示數據圖表(livecharts2)

livecharts是一個適用於.net的數據可視化庫,可以跨多個設備和框架運行

最后更新 2023/11/15 上午9:58
奔跑的皮卡峰
预计阅读 3 分钟
分类
WPF
标签
.NET C# WPF LiveChart

最近接手一個小項目,需要做一個數據顯示大屏,要能顯示曲線,顯示進出量,重點是要好看,我哪知道什麼是好看,就隨便做做唄。

作者实际项目

数据都是假的,只是做出一个效果。显示这种数据图,使用的是LiveCharts2。这是一个非常漂亮的 Charts 模块。官网如下:

官方首页

支持平台

LiveCharts2支持的还挺多,我们在这里选择WPF

如果我们直接通过NuGet进行搜索,会发现找到的LiveCharts版本较旧。

旧版本NuGet搜索结果

LiveCharts2相对V0版本做了很多改进和修复,通过NuGet安装LiveChartsCore.SkiaSharpView.WPF

新版本NuGet搜索结果

或者打開程式包管理器控制台,輸入:

Install-Package LiveChartsCore.SkiaSharpView.WPF -Version 2.0.0-rc2

控制台安装截图

等待安裝完成,就可以找到了。

项目安装截图

顺便安装一下CommunityToolkit.Mvvm,这个可以通过NuGet找到,这个包是因为GalaSoft.MVVMLight已经不再维护,所以官方做的新模型,可以很好的迁移进来。

新建一个MainViewModel,添加引用,增加代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using LiveChartsCore;
using LiveChartsCore.SkiaSharpView;
using CommunityToolkit.Mvvm.ComponentModel;

namespace LiveChartsDemo
{
    [ObservableObject]
    public partial class MainViewModel
    {
        public ISeries[] Series { get; set; }
            = new ISeries[]
            {
                new LineSeries<double>
                {
                    Values = new double[] { 2, 1, 3, 5, 3, 4, 6 },
                    Fill = null
                }
            };
    }
}

然后到MainWindow.xaml里,引用LiveCharts,设置DataContext

xmlns:lvc="clr-namespace:LiveChartsCore.SkiaSharpView.WPF;assembly=LiveChartsCore.SkiaSharpView.WPF"
<Window.DataContext>
	<local:MainViewModel />
</Window.DataContext>

然后增加CartesianChart

<Grid>
	<lvc:CartesianChart Series="{Binding Series}" />
</Grid>

图片

LineSeries为设置的线形图,当然还能有柱状图。

public ISeries[] Series { get; set; }
            = new ISeries[]
            {
                new ColumnSeries<double>
                {
                    Values = new double[] { 2, 1, 3, 5, 3, 4, 6 },
                },
                new LineSeries<double>
                {
                    Values = new double[] { 2, 1, 3, 5, 3, 4, 6 },
                    Fill = null
                },
            };

图片

還可以增加 title,用於說明圖標的作用。

public LabelVisual Title { get; set; }
            = new LabelVisual
            {
                Text = "Title",
                TextSize=20,
                Paint = new SolidColorPaint(SKColors.Black)
            };
<lvc:CartesianChart Series="{Binding Series}" Title="{Binding Title}"/>

图片

這裡就有個問題,如果你的 title 設置為中文,

public LabelVisual Title { get; set; }
            = new LabelVisual
            {
                Text = "标题",
                TextSize=20,
                Paint = new SolidColorPaint(SKColors.Black)
            };

就顯示不出來了

图片

我們需要修改一下設定,以便支持中文顯示。

public LabelVisual Title { get; set; }
            = new LabelVisual
            {
                Text = "标题",
                TextSize=20,
                Paint = new SolidColorPaint {
                    Color = SKColors.Black,
                    SKTypeface = SKFontManager.Default.MatchCharacter('汉')
                },
            };

图片

官方文檔非常豐富,也有對應的示例,做出來的結果還是非常不錯的。

部分效果 1:

图片

部分效果 2:

图片

部分效果 3:

图片

部分效果 4:

图片

部分效果 5:

图片

部分效果 6:

图片

据说免费的LiveCharts在数据量超过 10000 渲染效果会不好,需要使用付费版。这个我还没有验证,读者可以自行尝试一下。

Keep Exploring

延伸阅读

更多文章
同分类 / 同标签 2025/1/26

wpf 藉助自定義 xml 文件實現國際化

本文詳細居間了在wpf程式中使用自定義xml文件實現國際化的方法,包括安裝必備nuget包、動態獲取語言列表、動態切換語言、在代碼和xaml界面中使用翻譯字符串等內容,同時提供了源碼連結,幫助開發者輕鬆實現wpf應用的國際化。

继续阅读