このコードを使用して、各ポイントの値XとYを確認し、マウスイベントで曲線上に円を描きます:ここでjsFiddleの例
Y_valueはグローバルです!
var Y_value;
私は私の軸の怒りを定義します
x = d3.time.scale().range([0, w]);
y = d3.scale.linear().range([h, 0]);
サークルカーソルを定義します
var circle = svg.append("circle")
.attr("r", 8)
.attr("cx", 0)
.attr("cy", 0)
.style({fill: '#fff', 'fill-opacity': .2, stroke: '#000', "stroke-width": '1px'})
.attr("opacity", 0);
サークルにツールチップを追加します
var tooltip = circle.append("svg:title");
そして私は私のイベントコードを持っています
mySensitiveArea.on("mousemove", function() {
var X_pixel = d3.mouse(this)[0],
X_date = x.invert(X_pixel);
var Y_pixel = y(Y_value);
var pathData = curve1.data()[0]; // recupere donnée de la courbe
pathData.forEach(function(element, index, array) {
if ((index+1 < array.length) && (array[index].date <= X_date) && (array[index+1].date >= X_date)) {
if (X_date-array[index].date < array[index+1].date-X_date) Y_value = array[index].val;
else Y_value = array[index+1].val;
}
});
circle.attr("opacity", 1)
.attr("cx", X_px)
.attr("cy", Math.round(y(Y_value)));
tooltip.text("X = " + (X_date) + "\nY = " + (Y_value));
});