複数系列の折れ線グラフにシンボルを配置しようとしています。d3.js API リファレンスでは、シンボルは変換関数を使用して配置されます。
vis.selectAll("path")
.data(data)
.enter().append("path")
.attr("transform", function(d) { return "translate(" + x(d.x) + "," + y(d.y) + ")"; })
.attr("d", d3.svg.symbol());
残念ながら、これを適用して、以下に示し、この例で説明されているように、d.date といくつかの d.temperature セットにアクセスする独自の function(d) コールバック関数を構築することはできないようです。
var cities = color.domain().map(function(name) {
return {
name: name,
values: data.map(function(d) {
return {date: d.date, temperature: +d[name]}; <-- stored in 'd.values'
})
};});
私が試行錯誤して思いついたのは次のとおりです。これは、コミックリリーフのために提供しています。
for (i=0; i<cities[0].values.length; i++) // note: for comic relief only
{
vis.selectAll(".class")
.data(cities)
.enter().append("path")
.attr("transform", function(d) { return "translate(" + x(d.values[i].date) + "," + y(d.values[i].temperature) + ")"; })
.attr("d", d3.svg.symbol())
}
それは実際に機能します。これは面白いと思いますが、適切にネストされた関数を作成しようとする私の試みは、これまでのところ失敗しています。たとえば、これは transform="translate(NaN,NaN)" を与えます
.attr("transform", function(d) { return "translate(" + x(d.values, function(c) { return c.date}) + "," + y(d.values, function(c) { return c.temperature}) + ")"; })
私は何を理解していませんか?どんな援助でも大歓迎です。