コンテンツへスキップ

シンボル

· シンボルは、散布図などにおけるカテゴリカルな形状エンコーディングを提供します。シンボルは原点を中心に配置されます。transform を使用して、シンボルを別の位置に移動します。

symbol(type, size)

ソースコード · 指定されたtypesizeの新しいシンボルジェネレータを構築します。指定しない場合、typeは円、sizeは64にデフォルト設定されます。

js
svg.append("path").attr("d", d3.symbol(d3.symbolCross));

symbol(...arguments)

ソースコード · 指定されたargumentsのシンボルを生成します。argumentsは任意です。シンボルジェネレータのアクセッサ関数に、thisオブジェクトと共に渡されます。デフォルト設定では、シンボルジェネレータを呼び出すと、64平方ピクセルの円が生成されます。

js
d3.symbol()() // "M4.514,0A4.514,4.514,0,1,1,-4.514,0A4.514,4.514,0,1,1,4.514,0"

シンボルジェネレータにcontextがある場合、シンボルはpathメソッドのシーケンスとしてこのコンテキストにレンダリングされ、この関数はvoidを返します。それ以外の場合は、パスデータ文字列が返されます。

symbol.type(type)

ソースコード · typeが指定されている場合、シンボルの型を指定された関数またはシンボルの型に設定し、このシンボルジェネレータを返します。

js
const symbol = d3.symbol().type(d3.symbolCross);

typeが関数の場合、シンボルジェネレータの引数とthisが渡されます。selection.attrと共に使用する場合、たとえば順序スケールと組み合わせてカテゴリカルなシンボルエンコーディングを作成する際に便利です。

js
const symbolType = d3.scaleOrdinal(d3.symbolsFill);
const symbol = d3.symbol().type((d) => symbolType(d.category));

typeが指定されていない場合、現在のシンボルの型アクセッサを返します。

js
symbol.type() // () => d3.symbolCross

シンボルの型アクセッサは、デフォルトで以下になります。

js
function type() {
  return circle;
}

symbolsFillsymbolsStrokeを参照して、組み込みのシンボルタイプを確認してください。カスタムシンボルタイプを実装するには、symbolType.drawを実装するオブジェクトを渡します。

symbol.size(size)

ソースコード · sizeが指定されている場合、サイズを指定された関数または数値に設定し、このシンボルジェネレータを返します。

js
const symbol = d3.symbol().size(100);

sizeが関数の場合、シンボルジェネレータの引数とthisが渡されます。selection.attrと共に使用する場合、たとえば線形スケールと組み合わせて定量的なサイズエンコーディングを作成する際に便利です。

js
const symbolSize = d3.scaleLinear([0, 100]);
const symbol = d3.symbol().size((d) => symbolSize(d.value));

sizeが指定されていない場合、現在のサイズアクセッサを返します。

js
symbol.size() // () => 100

サイズアクセッサは、デフォルトで以下になります。

js
function size() {
  return 64;
}

symbol.context(context)

ソースコード · contextが指定されている場合、コンテキストを設定し、このシンボルジェネレータを返します。

js
const context = canvas.getContext("2d");
const symbol = d3.symbol().context(context);

contextが指定されていない場合、現在のコンテキストを返します。

js
symbol.context() // context

コンテキストはデフォルトでnullです。コンテキストがnullでない場合、生成されたシンボルpathメソッドのシーケンスとしてこのコンテキストにレンダリングされます。それ以外の場合は、生成されたシンボルを表すパスデータ文字列が返されます。

symbol.digits(digits)

ソースコード · digitsが指定されている場合、小数点以下の最大桁数を設定し、このシンボルジェネレータを返します。

js
const symbol = d3.symbol().digits(3);

digitsが指定されていない場合、現在の最大小数桁数(デフォルトは3)を返します。

js
symbol.digits() // 3

このオプションは、関連付けられたcontextがnullの場合、つまりこのシンボルジェネレータがパスデータを生成するために使用される場合にのみ適用されます。

symbolsFill

circlecrossdiamondsquarestartrianglewye

ソースコード · 塗りつぶし用に設計されたシンボルタイプのセットを含む配列:circlecrossdiamondsquarestartrianglewye順序スケールによるカテゴリカルな形状エンコーディングに役立ちます。

js
const symbolType = d3.scaleOrdinal(d3.symbolsFill);

symbolsStroke

asteriskcirclediamond2plussquare2timestriangle2

ソースコード · ストローク用に設計されたシンボルタイプのセットを含む配列:circleplustimestriangle2asterisksquare2diamond2順序スケールによるカテゴリカルな形状エンコーディングに役立ちます。

js
const symbolType = d3.scaleOrdinal(d3.symbolsStroke);

symbolAsterisk

ソースコード · アスタリスクシンボルタイプ。ストローク用。

symbolCircle

ソースコード · 円シンボルタイプ。塗りつぶしまたはストロークのいずれにも使用できます。

symbolCross

ソースコード · ギリシャ十字シンボルタイプ。腕の長さはすべて同じです。塗りつぶし用。

symbolDiamond

ソースコード · ひし形シンボルタイプ。塗りつぶし用。

symbolDiamond2

ソースコード · 回転した正方形シンボルタイプ。ストローク用。

symbolPlus

ソースコード · プラス記号シンボルタイプ。ストローク用。

symbolSquare

ソースコード · 正方形シンボルタイプ。塗りつぶし用。

symbolSquare2

ソースコード · square2シンボルタイプ。ストローク用。

symbolStar

ソースコード · 五芒星(ペンタグラム)記号タイプ。塗りつぶしを目的としています。

symbolTriangle

ソースコード · 上向きの三角形記号タイプ。塗りつぶしを目的としています。

symbolTriangle2

ソースコード · 上向きの三角形記号タイプ。枠線を引くことを目的としています。

symbolWye

ソースコード · Y字型の記号タイプ。塗りつぶしを目的としています。

symbolTimes

ソースコード · X字型の記号タイプ。枠線を引くことを目的としています。

カスタムシンボル

シンボルタイプは通常直接使用されず、symbol.type に渡されます。ただし、組み込みのタイプがニーズを満たさない場合は、以下のインターフェースを使用して独自のシンボルタイプ実装を定義できます。組み込みのシンボルタイプでも、シンボルジェネレーターの代替としてこの低レベルインターフェースを使用できます。

js
const path = d3.pathRound(3);
const circle = d3.symbolCircle.draw(path, 64);
path.toString(); // "M4.514,0A4.514,4.514,0,1,1,-4.514,0A4.514,4.514,0,1,1,4.514,0"

symbolType.draw(context, size)

指定されたsize(ピクセル単位の正方形)で、指定されたcontextにこのシンボルタイプを描画します。contextCanvasPathMethodsインターフェースを実装します。(これはCanvasRenderingContext2Dインターフェースのサブセットであることに注意してください!)d3-pathも参照してください。

pointRadial(angle, radius)

· ソースコード · 指定されたラジアン単位のangle(0は-y(12時)で、正の角度は時計回りに進む)と指定されたradiusに対して、点[x, y]を返します。

js
d3.pointRadial(Math.PI / 3, 100) // [86.60254037844386, -50]