トップへ戻る
Aioros.Graphs · C# の d3

d3 の描画エンジンを、バイト単位で

d3 から移植したスケール、シェイプ、カーブ、階層、コード、サンキー、フォースを、d3 自身の出力と照合してテストしています。SVG のパスデータはバイト単位で同じで、C# の構造体と span によって点ごとのメモリ割り当てなしに書き出されます。
19/19
のグラフが d3 とバイト単位で一致
2.7×
それらのグラフで d3 より高速
3.8×
52 のマイクロベンチマークで高速
測定方法
移植した関数はすべて、d3 自身が生成したフィクスチャと照合して実行されます。目盛りとラベルはビット単位、SVG のパスデータはバイト単位で一致します。時間はラボのランナー上で Node の d3 7.9.0 と比べた幾何平均です(Graphs リポジトリの docs/performance-history.md、第 6 節)。

このサーバーからライブで

以下のサンプルはすべて、いま読んでいるサーバーがレンダリングした XAML です。同じ XAML がデスクトップでもネイティブに動きます。
どの図も Aioros.Graphs を呼び出す小さな XAML コントロールです。Web ではパスが SVG としてページに書き込まれ、デスクトップではネイティブのジオメトリになります。
フォース有向グラフ
パーティションのサンバースト
コードダイアグラム
円パッキング
整列ツリー
ストリームグラフ

XAML

Drawing/Sunburst.cs
var tree = Hierarchy.FromNested(root, n => n.Children, out _) .Sum(values); var parts = Partition.Compute(tree, new PartitionOptions { Width = 2 * Math.PI, Height = radius }); var arc = new ArcShape(parts.Y0[node], parts.Y1[node], parts.X0[node], parts.X1[node]); Arc.Write(ref sink, arc); // d3.arc()(…), byte for byte, into SVG or native geometry