このフィドルはあなたの問題のほとんどを解決します: http://jsfiddle.net/CtTkP/
説明は以下の通りです:
- グラフ領域を超えて拡張するという意味がわかりません。ラベルは の中にあるべきです
chart-area
か? パンニング時にラベルが軸を超えて拡張することを意味する場合、問題はさらに 2 つの s を慎重に使用することで解決できますが、これは翻訳が提供するclip-path
値の優雅なフェードを許可しません。svg.axis
var clipX = svg.append("clipPath")
.attr('id', 'clip-x-axis')
.append('rect')
.attr('x', 0)
.attr('y', 0)
.attr('width', width)
.attr('height', margin.bottom);
svg.append("g")
.attr("class", "x axis")
.attr('clip-path', 'url(#clip-x-axis)')
.attr("transform", "translate(0, " + height + ")")
.call(xAxis);
// ...
var clipY = svg.append("clipPath")
.attr('id', 'clip-y-axis')
.append('rect')
.attr('x', - margin.left)
.attr('y', 0)
.attr('height', height)
.attr('width', margin.left);
svg.append("g")
.attr("class", "y axis")
.attr('clip-path', 'url(#clip-y-axis)')
.call(yAxis);
- パンが値を超えないようにするには、手動で
translate
ズームを制限する必要があります。
function zoomed() {
var trans = zoom.translate(),
scale = zoom.scale();
tx = Math.min(0, Math.max(width * (1 - scale), trans[0]));
ty = Math.min(0, Math.max(height * (1 - scale), trans[1]));
zoom.translate([tx, ty]);
svg.select(".x.axis").call(xAxis);
svg.select(".y.axis").call(yAxis);
// ...
これにより、グラフが制限を超えてパンすることはできなくなります。
- を明示的にオーバーライドしているため、値を調整して中央に配置できます
tickValues
。
var tickValues2 = [];
tickValues.forEach(function (t, idx) {
if (idx < tickValues.length - 1) {
tickValues2.push((t + tickValues[idx + 1]) / 2);
}
});
tickValues
次に、 forxAxis
とyAxis
を使用する代わりに、 を使用しますtickValues2
。