簡單易用的統計圖表 UI 控制元件 - LiveCharts2

圖片擷取自 LiveChart2 官網

如果需要在 UI 上需要呈現統計圖表的話,LiveCharts2 是一套很不錯的統計圖表的套件,除了完全 OpenSource 外也如官網所提到的,對於 .NET 相關跨平台 UI Framework 都有支援。

https://livecharts.dev/#frameworks

如果考慮 UI 呈現的感覺與效果,個人覺得 LiveCharts2 實在稱的上是 .NET 跨平台開發者在統計圖表上的不二選擇!

 


有關利用程式製作客製化統計圖表這檔事,長期以來似乎都是各家 UI 元件相當追求的事情。若因為各種外在因素的考量,現今也因拜 OpenSource 所賜,對於統計圖表的 UI 控制項也有了更多選擇,如:"ScottPlot" 、"LiveCharts2"…等。

對於 ScottPlot 這套統計圖表 UI 控制項,黑大也有專文介紹過:
https://blog.darkthread.net/blog/scottplot/

但對於 ScottPlot 的第一印象就比較 "實驗室" 感,走一種專業風格,沒有這麼討喜。

取自 ScottPlot 網站

 

反倒是 LiveChart2 所展示出來的風格就感覺上比較平易近人點。

取自 LiveChart2 網站

 

若是兩套件都花時間慢慢地進行的客製化調整,可能都可以調整出相同的效果與風格。

但…看倌們也知道

可以進行客製化所花費的時間有限,所以還是選擇自己需要風格吧~~

 

效仿黑大的專文,透過 Avalonia UI 的專案,練習 玫瑰曲線 的作為本文的結尾。

MainWindow.axmal 的 XAML:

<Window
    x:Class="TestLiveCharts.Avalonia.Views.MainWindow"
    xmlns="https://github.com/avaloniaui"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:lvc="using:LiveChartsCore.SkiaSharpView.Avalonia"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:vm="using:TestLiveCharts.Avalonia.ViewModels"
    Title="TestLiveCharts.Avalonia"
    x:DataType="vm:MainWindowViewModel"
    Icon="/Assets/avalonia-logo.ico"
    mc:Ignorable="d">
    <Window.DataContext>
        <vm:MainWindowViewModel />
    </Window.DataContext>
    <lvc:CartesianChart
        Series="{Binding Series}"
        XAxes="{Binding XAxes}"
        YAxes="{Binding YAxes}" />
</Window>

MainWindowViewModel 當中的 C# 程式:

public ICartesianAxis[] XAxes { get; set; } = [
        new Axis {
            Name = "X axis",
            SeparatorsPaint = new SolidColorPaint(new SKColor(220, 220, 200)),
            MinStep = 0.1,
            ForceStepToMin = true
        }
];

public ICartesianAxis[] YAxes { get; set; } = [
        new Axis {
            Name = "Y axis",
            SeparatorsPaint = new SolidColorPaint(new SKColor(200, 200, 200)),
            MinStep = 0.1,
            ForceStepToMin = true
        }
];
        
public ISeries[] Series { get; set; } = [
	    new LineSeries<ObservablePoint>{
            Values = Fetch(),
            Stroke = new SolidColorPaint(new SKColor(33, 150, 243), 4),
            Fill = null,
            GeometrySize = 0
        }
];
        
private static List<ObservablePoint> Fetch()
{
        var list = new List<ObservablePoint>();

        var pointCount = 1000;
        var n = 4;

        double[] theta = Enumerable.Range(0, pointCount).Select(o => 2 * Math.PI * o / pointCount).ToArray();
        double[] r = theta.Select((v, i) => Math.Sin(n * v)).ToArray();
        double[] x = r.Select((v, i) => v * Math.Cos(theta[i])).ToArray();
        double[] y = r.Select((v, i) => v * Math.Sin(theta[i])).ToArray();

        for (var i = 0; i < pointCount; i++)
        { 
            list.Add(new()
            {
                X = x[i],
                Y = y[i]
	        });
        }

        return list;
}

 

玫瑰曲線圖來囉~~~

若想看 .NET MAUI 的部分,請看:
https://dotblogs.com.tw/jamestsai/2025/01/13/dot-NET-UI-Controls-Library-LiveChart2-MAUI


 


I'm a Microsoft MVP - Developer Technologies (From 2015 ~).
 

MVP_Logo



I focus on the following topics: Xamarin Technology, Azure, Mobile DevOps, and Microsoft EM+S.

If you want to know more about them, welcome to my website:
https://jamestsai.tw 


本部落格文章之圖片相關後製處理皆透過 Techsmith 公司 所贊助其授權使用之 "Snagit" 與 "Snagit Editor" 軟體製作。