【wpf】SparrowChartWpfを使用してグラフ表示_正弦波余弦波形作成と出力
wpfでグラフを表示させるライブラリ【SparrowChart】
SparrowChartをNuGetパッケージで検索して、【Sparrow.Chart.Wpf】をインストールする。
出力波形グラフ
正弦波形を生成する
ソースコードを紹介
wpfでの実装なので、xamlコードとcsコードの両方を載せておきます。
MainWindows.xaml
<Window x:Class="WpfChartTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfChartTest" xmlns:sparrow="http://sparrowtoolkit.codeplex.com/wpf" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800" Loaded="Window_Loaded"> <Grid Margin="0,0,2,0"> <!--全体のGrid設定--> <Grid.RowDefinitions> <!--行設定--> <RowDefinition Height="1*" /> <RowDefinition Height="9*" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <!--列設定--> <ColumnDefinition Width="1*" /> </Grid.ColumnDefinitions> <Grid Grid.Column="0" Grid.Row="1" Background="WhiteSmoke" > <sparrow:SparrowChart Visibility="Visible" VerticalAlignment="Top" Height="367" > <sparrow:SparrowChart.XAxis> <sparrow:LinearXAxis x:Name="line_x" MinValue="0" MaxValue="1" Visibility="Visible"/> </sparrow:SparrowChart.XAxis> <sparrow:SparrowChart.YAxis> <sparrow:LinearYAxis x:Name="line_y" MinValue="0" MaxValue="1" Visibility="Visible"/> </sparrow:SparrowChart.YAxis> <sparrow:LineSeries PointsSource="{Binding Path=Points_sin_a}" XPath="X" YPath="Y"/> <sparrow:LineSeries PointsSource="{Binding Path=Points_cos_a}" XPath="X" YPath="Y"/> </sparrow:SparrowChart> </Grid> </Grid> </Window>
Gridの中にChart入れてます。Gridの行列の数や高さなどな適当なので、その辺は柔軟に変更していただいて問題ないです。
要は、<sparrow:SparrowChart>の中身が重要になってます。
MainWindows.xaml.cs
using System; using System.Collections.ObjectModel; using System.Windows; namespace WpfChartTest { /// <summary> /// MainWindow.xaml の相互作用ロジック /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } public ObservableCollection<Point> Points_sin_a { get; set; } public ObservableCollection<Point> Points_cos_a { get; set; } public double fs = 1280; //サンプリング周波数 public double freq = 80; //周波数 public double size = 128; //データ数 private void Window_Loaded(object sender, RoutedEventArgs e) { //グラフ Points_sin_a = new ObservableCollection<Point>(); Points_cos_a = new ObservableCollection<Point>(); double[] data_a = new double[(int)size]; double[] data_b = new double[(int)size]; // 波形生成 for (int i = 0; i < size; i++) { double t = (double)i / fs; //time // f(t) = a*sin(2πft) data_a[i] = 0.3 * Math.Sin(2 * Math.PI * freq * t); data_b[i] = 0.3 * Math.Cos(2 * Math.PI * freq * t); //グラフ要素にデータを挿入 Points_sin_a.Add(new Point { X = i, Y = data_a[i] }); Points_cos_a.Add(new Point { X = i, Y = data_b[i] }); } this.DataContext = this; //波形プロット //グラフ軸の表示範囲設定 line_x.MinValue = 0; //X軸の最小値 line_x.MaxValue = size; //X軸の最大値 line_y.MinValue = -0.3; //Y軸の最小値 line_y.MaxValue = 0.3; //Y軸の最大値 //line_y.MinValue = data_a.Min(); //Y軸の最小値 データ内の最小振幅値で可変 //line_y.MaxValue = data_a.Max(); //Y軸の最大値 データ内の最大振幅値で可変 } } }
周波数に対応した波形を生成するように実装してみました。
設定値(サンプリング周波数、周波数、データ数)は適当です。
最後の方に、グラフ軸の表示範囲設定ができるように書いてみました。
表示したいグラフに対して変更してください。
出力結果グラフ表示
出力結果を載せておきます。
Sin波とCos波が出力できました。
【余談】画面のLoadedのイベントハンドラーを使用してみる
アプリを起動して画面がLoadedされるときのイベントハンドラーを使用してみました。
Loadedイベントハンドラーを設定する方法は、
Windows画面を選択して稲妻マークのイベントハンドラー一覧から「Loaded」を選択して、
空欄枠をダブルクリックすれば、自動でコードが生成される