WPFでデータチャートを表示する (LiveCharts2)

WPFでデータチャートを表示する (LiveCharts2)

LiveChartsは.Net対応のデータ可視化ライブラリで、複数のデバイスやフレームワークで実行できます

最終更新 2023/11/15 9:58
奔跑的皮卡峰
読了目安 2 分
カテゴリ
WPF
タグ
.NET C# WPF LiveChart

最近、小さなプロジェクトを引き継いで、データ表示用の大画面を作る必要がある。曲線を表示し、出入り量を表示し、見た目が良いことが重要だ。そもそも何が「良い」か分からないので、適当に作ってみた。

作者実際のプロジェクト

データはすべて偽物で、効果を出すだけ。データグラフの表示には LiveCharts2 を使用。これは非常に美しい Charts モジュールだ。公式サイトは以下の通り:

公式トップページ

サポートプラットフォーム

LiveCharts2 は多くのプラットフォームをサポートしており、ここでは WPF を選択する。

NuGet で直接検索すると、見つかる LiveCharts のバージョンは古い。

旧バージョンNuGet検索結果

LiveCharts2V0 バージョンから多くの改良と修正が加えられており、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.xamlLiveCharts を参照し、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 を超えるとレンダリング性能が低下し、有料版が必要になると言われている。これはまだ検証していないので、読者が自分で試してみてほしい。

さらに探索

関連読書

その他の記事
同じカテゴリ / 同じタグ 2025/01/26

WPF カスタムXMLファイルによる国際化

この記事では、WPFプログラムでカスタムXMLファイルを使用して国際化を実現する方法について詳しく説明します。必要なNuGetパッケージのインストール、言語リストの動的取得、言語の動的切り替え、コードおよびXAMLインターフェースでの翻訳文字列の使用などを含み、ソースコードのリンクも提供し、開発者がWPFアプリケーションの国際化を簡単に実装できるように支援します。

続きを読む
同じカテゴリ / 同じタグ 2024/01/25

C# WPFにおけるFluentValidationの応用

この記事では、C# WPFプロジェクトでFluentValidationを使用してプロパティ検証を行う方法と、MVVMパターンを通じてこの機能を実装する方法について詳しく説明します。

続きを読む