私はd3とSVGを使って作図しているプロットに対してシャドーイングをしたいのですが、隣接する要素が重なるドロップシャドウに問題があります。現在の見た目については、下の画像を参照してください。影のいくつかの上に影が描画されているので、中央の六角形の標高が変化しているように見えます。私がしたいのは、バックグラウンドでのみレンダリングするような方法でシャドーを設定し、隣接する他のヘクスの上に影を置かないようにすることです。これらのスタイルは、その後、六角形に適用されているSVGドロップシャドーレイヤー
var filter = defs.append("filter")
.attr("id", "drop-shadow")
.attr("height", "130%");
// SourceAlpha refers to opacity of graphic that this filter will be applied to
// convolve that with a Gaussian with standard deviation 3 and store result
// in blur
filter.append("feGaussianBlur")
.attr("in", "SourceAlpha")
.attr("stdDeviation", 1)
.attr("result", "blur");
// translate output of Gaussian blur to the right and downwards with 2px
// store result in offsetBlur
filter.append("feOffset")
.attr("in", "blur")
.attr("dx", 1)
.attr("dy", 1)
.attr("result", "offsetBlur");
// overlay original SourceGraphic over translated blurred opacity by using
// feMerge filter. Order of specifying inputs is important!
var feMerge = filter.append("feMerge");
feMerge.append("feMergeNode")
.attr("in", "offsetBlur")
feMerge.append("feMergeNode")
.attr("in", "SourceGraphic");
::私が持っている
d3.select(this).style("filter", "url(#drop-shadow)")