【WPF】ScottPlotでグラフを描く

記事内に広告を含みます

WPF(Windows Presentation Foundation)を使ってグラフを表示させるときに使える『ScottPlot』というライブラリの使い方を解説します。

なお、WPFについて詳細を以下の記事で解説していますので、気になる方はご参照ください。

この記事を読むと・・・?

この記事を読むと、WPFでこんな感じのグラフを描画することができます。

興味のある方は是非ご一読ください。

WPFでのグラフの描き方

UI(ユーザーインターフェース)を開発しているときに、グラフを表示させたいことがあるかもしれません。

このとき、昔ながらのWindows.Formsであれば『Chartコントロール』があるのですが、残念ながらWPFには用意されていません。

ほんとにWPFにChartコントロールはないの?
はい。ただ、厳密にはWindows.Formsをusing句を使ってインポートすると使うことはできるようです。
ただそうは言っても、「せっかくWindows.Formsから離れてWPFでUIを作ろうとしているのにまたWindows.Forms!?」と思われる方には、今回の記事が参考になるかもしれません。

このことから、WPFでグラフを表示させたいときは、グラフ描画のためのライブラリを使用することが一般的です

WPFで使用できるグラフ描画のライブラリは『ScottPlot』や『OxyPlot』、『LiveChart』、『MSChart』が代表的ですが、その中でも本記事ではScottPlotの使い方をご説明します。

ScottPlotが持つ特長は以下のとおりです。

ScottPlotの特長
  • グラフの描画が高速である
  • 大量のデータの描画が得意である

ScottPlotのインストール

ScottPlotは、VisualStudioのNuGetパッケージマネージャーでインストールできます。

パッケージ名とバージョン(2024年9月現在)
パッケージ名バージョン
ScottPlot.WPF5.0.39
NuGetパッケージマネージャーを開く

ツール』ー『NuGetパッケージマネージャー』ー『ソリューションのNuGetパッケージの管理』を押して、NuGetパッケージマネージャーを開く。

ScottPlotをインストールする

NuGetパッケージマネージャー画面のタブを『参照』にし、検索ボックスに「ScottPlot」と入力します。

すると、検索結果の中に『ScottPlot.WPF』というのがあるのでこれを選択します。

そして、右側にある対象のプロジェクト名に☑マークを付けて「インストール」ボタンを押します。

ライセンスに同意する

左記のようなライセンスへの同意確認ウィンドウが表示されるので、「同意する」ボタンを押します。

これでScottPlotのインストールは完了です。

WPFでグラフを表示させる

基本の使い方

基本的な使い方は、ScottPlotのインスタンスをXAMLで生成し、このインスタンスに対してコードビハインドで色々設定するやり方かと思います。

XAML

解説

ScottPlotのインスタンスをWPF_GraphとしてViewに配置します。

コードビハインド

解説

ViewのLoadイベント発生時にLoadEvent()に処理が飛んできます。

ここでグラフのデータ設定が行われて再描画されます。

ScottPlotのグラフ設定

ScottPlotのグラフ設定としてよく使いそうなものをまとめておきます。

グラフ種別

折れ線グラフを描画する
棒グラフを描画する

グラフ色設定

ラベル表示領域の色を設定する
データ表示領域の色を設定する

軸最大・最小設定

軸の最大・最小を設定する
XY軸を自動スケーリングする

軸目盛り設定

XY軸目盛りのフォントサイズを設定する
XY軸目盛りの区切り方を設定する
補足

TargetTickCountは主目盛りの刻み数を設定するもののようですが、設定どおりにならないこともあります。

あくまで『Target(目標)』ということなのでしょうか。

取り急ぎ、ここは微調整して狙いの刻みにしていく方がよさそうです。

軸ラベル設定

XY軸のラベルを設定する
XY軸のラベルのフォントを設定する
XY軸のラベルのフォントサイズを設定する

描画設定

グラフを再描画する

なお、ScottPlotで設定できる項目はまだまだありますので、詳細は公式HPのCookbookをご参照ください。

MVVMでの使い方

こちらはどうしてもというとき用です。

WPFとセットでよく扱われるMVVMでも使いたいところですが、ScottPlotはMVVMに対応していません。

なので、Model側でインスタンスを生成して、それをViewModelに受け渡し、Viewとバインドする、という手法にムリやりはめ込んでみます。

なお、MVVMについて詳しく知りたい方は以下の記事もご覧ください。

Model

解説

WpfPlotクラスのインスタンスであるScottPlotGraphを生成し保持します。

ただし、今回のようにムリやりバインディングする場合、インスタンスのパラメータ変更ではsetterに処理が移ってくれず、setterに処理を移すにはインスタンス生成のようにインスタンス自体の変化が必要になります。

つまり、従来のMVVMで行うようなRaisePropertyChanged()による変更通知をトリガーに、Viewを更新していくことはできないということです

そのため、RaisePropertyChanged()やNotifyChangedはコメントアウトしています。

RaisePropertyChanged()が使えない以上、自動的に再描画はしてくれないので、自分で描画のリフレッシュを行う必要がありますので、最後にRefresh()で再描画しています。

ViewModel

解説

コンストラクタでModelのインスタンスを生成するだけです。

なお、起動時のコンストラクタ処理後にはScottPlotGraphのgetterが働くので、Model側からインスタンスを取得します。

View

解説

XAML上でDataContextにViewModelを設定してバインディングの準備をしてから、ContentControlのContentプロパティにViewModelのScottPlotGraphのインスタンスをバインディングします。

これによりViewにグラフが表示されます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です