私のデータセットをサポートするために、少し変更を加えた複数シリーズの折れ線グラフコードがあります。これが私がやりたいことであり、私が見た解決策は私にとって適切に機能していないようです。ライン上の各ポイントに要素 (円、四角形、非表示など) をオーバーレイして、mouseover
そのポイントに要素をアタッチして、d.time、d.jobID、およびその量を含むデータを含むボックスを表示できるようにしたいと考えています。それは平均とは異なります。可能であれば、平均を表すために描かれた 2 本の線ではなく、主線 (変化する線) に対してのみこれを行うソリューションを希望します。ここに、目視検査用にそのままのグラフの写真があります。それがうまくいかない場合は、私もそれを添付しました。
以下のコードを少し投稿しました。
d3.tsv("values.tsv", function(error, data) {
color.domain(d3.keys(data[0]).filter(function(key) { return key !== "time" && key !== "jobID"; }));
data.forEach(function(d) {
d.time = parseDate(d.time);
d.jobID = parseInt(d.jobID);
});
var points = color.domain().map(function(name) {
return {
name: name,
values: data.map(function(d) {
return {time: d.time, jobID: d.jobID, value: parseFloat(d[name],10)};
})
};
});
....
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
svg.append("g")
.attr("class", "y axis")
.call(yAxis)
.append("text")
.attr("transform", "rotate(-90)")
.attr("y", 7)
.attr("dy", ".71em")
.style("text-anchor", "end")
.text("mbps");
var point = svg.selectAll(".point")
.data(points)
.enter().append("g")
.attr("class", "point");
point.append("path")
.attr("class", "line")
.attr("d", function(d) { return line(d.values); })
.style("stroke", function(d) { return color(d.name); });
point.append("text")
.datum(function(d) { return {name: d.name, jobID: d.jobID, value: d.values[d.values.length - 1]}; })
.attr("transform", function(d) { return "translate(" + x(d.value.time) + "," + y(d.value.value) + ")"; })
.attr("x", 6)
.attr("dy", ".7em")
.text(function(d) { return d.name; });
});
私の実装で機能するかどうかを確認するためだけに、次のコードを既に試しました。
point.append("svg:circle")
.attr("stroke", "black")
.attr("fill", function(d, i) { return "black" })
.attr("cx", function(d, i) { return x(d.time) })
.attr("cy", function(d, i) { return y(d.value) })
.attr("r", function(d, i) { return 3 });
D3.JS はかなり素晴らしい作品のように思えます。
編集:jsfiddle