これにネストされた選択を使用することができます。あなたは既に、このビットで、ネストされた選択を使用している:
svg.selectAll(".bar")
.data(function(d) {return d.values;})
上記以前に作成した3 SVGsのそれぞれに異なるデータをバインドします。これはfunction(d)
を3回呼び出すことで行い、毎回異なるd.values
を返します。
同様のことをして、各SVGに別々の注釈セットをバインドして作成することができます。チャートごとに適用可能な注釈を返す関数(data()
に渡す)が必要ですが、今回はd.values
のように事前計算されたものはありません。代わりに、あなたはfilter()
を使用して、annotations
配列のうち、該当する注釈を抽出する必要があります:あなたは、テキストを作成し、それを配置するために、バーのために行われてきたようにその後、あなたはenter()
とappend()
を使用することができます
svg.selectAll(".annotation")
.data(function(d) {
// return annotations whose key matches d's key
return annotations.filter(function(a) { return a.key == d.key; });
})
。私はあなたがそれをレイアウトするつもりかわからないんだけど、完全にあなたは、このような何かしたい:
svg.selectAll(".annotation")
.data(function(d) {
return annotations.filter(function(a) { return a.key == d.key; });
})
.enter()
.append("text")
.attr("class", "annotation")
.attr("x", function(d) { return x(d.xPos); })
.attr("y", function(d) { return d.yPos; })
.text(function(d) { return d.note; })
参照:
完璧だ、おかげで。そして、はい、私はキーを一致させると、私はそれをレイアウトする方法だった。私はうるう年と別の問題に気付きました。 2016年のデータには2月29日が含まれています。これはx.domainを設定したところでこれに取り組むことができますか?または私はここに新しい質問を掲示すべきですか? – eoin
それは別々の問題ではなく、おそらく独自の投稿にふさわしいものです。ええ、それは、時間スケールに切り替えることによって、または尺度の領域に29番目を含むことを保証することによって、xスケールを通して対処されるべきです。前者は複雑です(バーの配置/サイジングがより複雑になるため)、後者は、毎年29回目が表示されることを意味します(非閏年のバーはありません)。だからそれはあなたが達成しようとしているものに依存します。 – meetamit