こんにちは、Habrausers様!
この投稿では、
WPF DynamicDataDisplayのインタラクティブなデータ視覚化のための無料のオープンソースライブラリである開発について説明し
ます 。
私たちについて少し:私たちはモスクワ州立大学の計算数学とサイバネティックス学科の
マイクロソフト技術研究所の従業員です。 最近、Habréで教員が1年生をどのように見ているかについての記事がありました。今回の記事では、教員の学生が古いコースで何をするかについてもう少し学ぶことができます。 5年生の学生が取り組んでいる例は、科学データDynamicDataDisplay(略してD3)のインタラクティブな視覚化のためのライブラリです。
ちょっとした歴史
ライブラリの開発は、研究室とマイクロソフトリサーチケンブリッジの間のコラボレーションの一環として、2007年9月に始まりました。 2008年の夏に、ライブラリの最初のバージョンがWebサイト
dynamicdatadisplay.codeplex.comで公開されました。 出版以来、ライブラリの安定バージョンの別の3つの問題が通過しました。 現在、次のバージョンのリリースが準備されています-おそらくv0.4には、多くの変更と革新が含まれています。
しかし、非常に入門的な言葉-DynamicDataDisplayライブラリとは何で、その機能は何ですか?
DynamicDataDisplayの機能
DynamicDataDisplayは、WPFまたはSilverlightテクノロジで構築されたマネージアプリケーションで使用することを目的としています(詳細は後述)。
グラフを描画するための.NETライブラリが既にたくさんあると言うことができます。ここで私はあなたに同意します-本当にたくさんあります。 しかし、
品質には多くのことが望まれます。そのようなコンポーネントに、数万の長さのデータに基づいてグラフを作成するように依頼します。
DynamicDataDisplayが対応するものよりも優れている主な利点は、大量のデータの対話型表示、無料、オープンソースコードの存在に重点を置いていることです。 大量のデータをインタラクティブに表示するということは、情報の静的な画像を取得するのではなく、その周りを移動したり、個々のエリアをズームインしたり、そこから離れたりする機能を備えたライブグラフを取得できることを意味します。 DynamicDataDisplayには、ニーズに合わせて簡単に変更および補完できるモジュール式の柔軟なアーキテクチャがあります。
したがって、DynamicDataDisplayが表示できるもの:
- 線-グラフ:
- マーカーのシーケンス-データに関連付けられた小さな視覚要素。 マーカーレベルでは、DataBindingがサポートされており、データとマーカーの外観とのより複雑な関係をC#コードから指定できます。
さまざまな組み込みマーカー:
さまざまな棒グラフ:
- 多様なタイプの軸-通常の数値、一時的な2つのタイプ(DateTimeタイプとTimeSpanタイプ)およびその他。 次の図は、グラフの横に存在する可能性のある軸の暴動を示しています。
ご覧のように、事前定義された軸の数は決まっていないため、ライブラリユーザーは最適な軸のセットを自由に見つけることができます。
D3機能の次の大きなセクションは
カード
DynamicDataDisplayは、インターネットからダウンロードしてハードドライブに保存し、もちろんあらゆる種類のカードを表示できます。 D3の公式リリースでは、OpenStreetMapsという無料の無料のマップサーバーが1つしかありません。これは、D3バンドルでそのプロバイダーをリリースする許可を取得しました。 実際、DynamicDataDisplayコンポーネントはMicrosoftに代わってインターネット上に配置されているため、コンポーネントと組み合わせることができる既製のマッププロバイダーにいくつかの制限を課しています。Microsoftに代わってGoogleやYahooマップをハッキングすることはできません。 YandexまたはMail.ru、またはMicrosoft自体(Bing Maps)。 ただし、このようなプロバイダーを自分で作成するのは非常に簡単です。機能しないGoogle Skyマッププロバイダーコードの例を示します。
パブリックシールクラスGoogleSkyServer:NetworkTileServer
{
パブリックGoogleSkyServer()
{
UriFormat = "XXX.google.com/mw-planetary/sky/XXX.jpg";
ServerName = "Google Sky";
ServersNum = 2;
MinServer = 1;
FileExtension = ".jpg";
}
保護オーバーライド文字列CreateRequestUriCore(TileIndexインデックス)
{
var level =(int)index.Level;
var y = MapTileProvider.GetSideTilesCount(レベル)/ 2-index.Y-1;
var x = MapTileProvider.GetSideTilesCount(レベル)/ 2 + index.X;
string uri = String.Format(UriFormat、CurrentServer、x、y、レベル);
return uri;
}
}
(例は、特に回避するために動作不能にされました。)
これは、OpenStreetMapsカードが最も遠くを見る方法です。
ご覧のとおり、垂直軸には非線形に分布したサンプルが含まれています。これは、元のマップの緯度がこのように分布しているためです。 したがって、地図の上に表示されるデータにメルカトル変換を適用して、正確にデータが存在するようにします。
そして、シェーダー効果を使用して、非線形メルカトル変換が適用されるマップの外観を次に示します。
緯度と経度の両方の軸が線形であるため、このマップに重ねられたデータに変換を適用する必要はありません。
マップに基づいて、他にもかなりの数のビジュアライゼーションを開発しました。たとえば、これはマンデルブロフラクタルです。これに近づくと、追加のマップタイルが計算され、タイルピラミッドに追加されます(タイルピラミッドは、スケールレベルで並べられたタイルのツリーです。最初のレベルでは、たとえば、1つの画像、2番目の画像-4、3-16など):
ダウンロードしたマップタイルは、一種のzipアーカイブ(docx、xlsx、xpsドキュメント形式で使用されているものと同じWPFパッケージ)にパックし、事前にロードされたタイルキャッシュとして機能する、より便利な形式で配布できます。
輪郭
DynamicDataDisplayは、レベル線または等高線を任意の曲線グリッド上に描画できます。
この画像は、地球の高さと深さの水平線を示しています。 輪郭自体は非常に大きく、WPFツールを使用して描画されるため、非常に顕著に遅くなります。 表示を高速化するために、ビットマップの等高線のレンダリングを使用して、マップによって描画されます。 それは非常に賢く判明しました。
これは、ビットマップへの中間保存なしで、輪郭が独自に描画される方法です。
DynamicDataDisplayの開発の見通し
将来的には、DynamicDataDisplayを開発し
て、世界がより良くなるように
キャプチャすることを計画しています。
以下は、すでに開発中の、またはまもなく開発が開始されるイノベーションの一部です。
- カラーカード
- 3Dレンダリング:
- DeepZoomのカード
最後に、ライブラリに関連するすべてへの一連のリンク:
便利なリンク
現時点では、このライブラリはロシア以外では非常によく知られています。たとえば、codeplex.comの統計から判断できます。 いくつかの商用プロジェクトがDynamicDataDisplayライブラリを正常に使用しています。 この記事の目的は、ロシアの図書館の知名度を上げることです。
これですべてです。私たちのライブラリが便利で、プロジェクトで簡単かつ正常に使用できることを願っています。