WPF はじめての OxyPlot
WPFはチャート難民?
本気でチャートを使いたい民は、グレープシティ、インフラジスティックス、SciChartなど有料コンポーネントを使うのか・・・?
さらっと公式HPを見た感じだと LiveCharts.Wpf が良さそうだったけど、残念ながら .NET Core 3.1 に対応していない
なので代わりに OxyPlot.Wpf をプロジェクトに導入する
成果物
本記事で掲載しているコードの元プロジェクト
※ GitHubのほうは随時更新する予定
WPFでOxyPlotをつかう
(いろいろ調べている中で予感はしていたけど、ドキュメントの整備が行き届いていない)
プロジェクトを立ち上げたら以下 NuGet パッケージをインストールする
Install-Package OxyPlot.Wpf
とりあえずグラフを描いてみる
チュートリアルの通りにコピペして実行すると、緑色のコサインカーブが表示される
グラフの細かいところを変更する
Qiita記事から部品取りしていくのが早い
記事 | おすすめポイント |
---|---|
[C#] oxyplotでグラフを書く1 | コードが長く載っているので、必要なところだけ取って使える |
【更新あり】OxyPlotでグラフを表示させる際にハマったことまとめ | 「おまけ」の章に、いろいろ細かい設定をする方法が載っている |
[C#] OxyPlot Tips集 | やりたいことごとに章分けされている |
プロットを更新する
手順が3つ書かれているが、XAMLへPlotModel
をバインディングしている場合は、PlotModel.Invalidate(true)
を呼べばグラフが更新される
Case1: グラフを書き換える
Clear()
して、データをAdd
して、InvalidPlot(true)
をする
MyModel1.Series.Clear();
MyModel1.Series.Add(new FunctionSeries(Math.Sin, 0, 10, 0.1, "sin(x)"));
MyModel1.InvalidatePlot(true);
Case1' グラフの上に別のグラフを描く
Clear
しなかった場合は、既存のプロットに追加される
//MyModel1.Series.Clear();
MyModel1.Series.Add(new FunctionSeries(Math.Sin, 0, 10, 0.1, "sin(x)"));
MyModel1.InvalidatePlot(true);
Case2: グラフのプロットを追加する
すでにあるプロットにデータを追加していく
PlotModel
のシリーズを別途保持(_lineSeries
)しておいて、そこにAdd
する
var x = DateTime.Now.Second;
var y = new Random().Next(-100, 100);
_lineSeries.Points.Add(new DataPoint(x, y));
MyModel2.InvalidatePlot(true);
Case3: モデルのデータをプロットする
データはViewModel
とは別にモデルで持っておきたい
MyModel3 = _plotModelHandler.Create();
_plotModelHandler.Update();
//----------------------------------
// Model
_model.Axes.Add(XAxis); // 軸の最大値などを設定している
_model.Series.Add(_series); // モデルがデータを保持している
internal void Update()
{
var x = new Random().Next(0, 1023);
var y = new Random().Next(0, 4065);
_series.Points.Add(new DataPoint(x, y));
_model.InvalidatePlot(true);
}
おわりに
凝ったことしなければ、シンプルで使いやすいライブラリだと思う
参考サイト
Author And Source
この問題について(WPF はじめての OxyPlot), 我々は、より多くの情報をここで見つけました https://qiita.com/t13801206/items/6474e495ed05dabce38c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .