细节决定成败
我希望你自己已经找到了正确的答案,问题和我的回答之间有一点延迟;)
您的解决方案有效,只是矩形稍微放错了位置并且需要替换两行代码:
svg.append("clipPath")
.attr("id", "clip") // <-- we need to use the ID of clipPath
.append("rect")
.attr("width", width)
.attr("height", height)
.attr("fill", "blue");
...
svg.append("path")
.attr("class", "line")
.attr("clip-path", "url(#clip)"); <-- here
更正后的代码在这里。
如何使用剪辑
@Scott Cameron 建议的站点还显示了一些工作示例,它们帮助我弄清楚如何正确地对组和其他元素应用剪辑。
对组应用裁剪的解决方案的好处是我们不必分别对每条网格线和数据线应用。
以下 SVG 示例来自上述站点,稍作修改,适用于浏览器和 inkscape:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 1100 400" version="1.1">
<defs>
<rect id="r1" width="150" height="150" stroke="black" stroke-width="1"/>
<circle id="r2" cx="100" cy="100" r="100" stroke="black" stroke-width="1"/>
<circle id="r3" cx="100" cy="100" r="100" stroke="black" stroke-width="1"/>
<radialGradient id="g1" cx="50%" cy="50%" r="50%" fx="25%" fy="25%">
<stop stop-color="black" offset="0%"/>
<stop stop-color="teal" offset="50%"/>
<stop stop-color="white" offset="100%"/>
</radialGradient>
<clipPath id="clip1">
<path d="M 0 0 L 550 200 L 1100 0"/>
</clipPath>
</defs>
<g clip-path="url(#clip1)">
<use x="250" y="0" xlink:href="#r1" fill="url(#g1)"/>
<use x="350" y="150" xlink:href="#r2" fill="url(#g1)"/>
<use x="580" y="50" xlink:href="#r3" fill="url(#g1)"/>
</g>
</svg>
我们并不孤单
如果我们在某个时候卡住了,我们通常需要正确的工具而不是正确的文档: