このようなデータの視覚化のために、私は本当にDynamicDataDisplayが好きです。コンポーネントは現在のところSilverlightのために維持管理されているだけですが、WPF用のオープンソース(リンク)バージョンがあり、本当に素晴らしいライブラリです。
ライブラリはIObservable
コレクションを使用し、DateTime
の軸値をサポートしています。
マーカーグラフタイプが組み込まれています(下の例を参照)。
カスタムマーカーを使用することができます。ズームやスクロール、その他の素晴らしい機能などをサポートしています。非常に大きなデータセットであっても、非常に高速です。
データセットがあるのでIObservable
あなたのグラフは、データ収集が更新されるたびに更新されるように、チャートコンポーネントは、基礎となるデータセットの変化に動的に応答します。
が使用:
using System.ComponentModel;
using Microsoft.Research.DynamicDataDisplay;
using Microsoft.Research.DynamicDataDisplay.Charts;
using Microsoft.Research.DynamicDataDisplay.DataSources;
using Microsoft.Research.DynamicDataDisplay.PointMarkers;
メイン:
public Window1()
{
InitializeComponent();
//
const int N = 100;
List<double> x = new List<double>();
List<double> y = new List<double>();
DateTimeAxis dtAxis = new DateTimeAxis();
_plotter.HorizontalAxis = dtAxis;
Random rand = new Random();
for (int i = 0; i < N; i++)
{ //generate some random data
x.Add(dtAxis.ConvertToDouble(DateTime.Now.AddDays(i)));
y.Add(rand.Next(N));
}
EnumerableDataSource<double> gX = new EnumerableDataSource<double>(x);
EnumerableDataSource<double> gY = new EnumerableDataSource<double>(y);
_MarkerGraph.DataSource = new CompositeDataSource(gX,gY);
//no scaling - identity mapping
gX.XMapping = xx => xx;
gY.YMapping = yy => yy;
CirclePointMarker mkr = new CirclePointMarker();
mkr.Fill = new SolidColorBrush(Colors.Red);
mkr.Pen = new Pen(new SolidColorBrush(Colors.Black),2.0);
_MarkerGraph.Marker = mkr;
}
XAML:
編集ここ
は一例で
<Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d3="clr-namespace:Microsoft.Research.DynamicDataDisplay;assembly=DynamicDataDisplay" Title="Window1" Height="481" Width="651"> <Grid> <d3:ChartPlotter Name="_plotter"> <d3:MarkerPointsGraph Name="_MarkerGraph"/> </d3:ChartPlotter> </Grid>
出力:
のDateTime軸のスケール美しく、適切なものは何でも...日、月、時間、秒刻みを調整します。やさしい!
このパッケージを使用する場合は、と入力してください。は、ソースをダウンロードしてソリューションに追加することをお勧めします。ドキュメンテーションはD3にとって非常に貧弱で、プロジェクト内のソースを持つことは、どのように動作するかを理解するのに役立ちます。また、必要に応じて追加/拡張が非常に簡単になります。コンパイルされたDLLではなく、これを行う場合は、ソリューション内プロジェクトを参照するようにしてください。
公開されているSilverlightコンポーネントではなく、開いているWPFコンポーネントではなく、多くの利用可能なドキュメントとオンラインサンプルが対象となっています。これらの2つのバージョンではコンポーネントの多くが異なるため、WPFコンポーネントを調べてそこにあるものを確認する必要があります。上の例はv0.3 WPFコンポーネントの例です。
プログラムで要素を作成し、それをグリッドに追加するべきではありません。あなたのblobのためのlistItemデータ型を作成し、blobのコレクションをlistViewにバインドする必要があります。 – Alain
スムーズにスクロールするのは非常に難しいでしょうか?私はすべてのデータをコレクションに追加するか(クラッシュする)、コレクションを動的に再作成する必要があります。これはおそらくスムーズに見えません。 – Sugrue