我正在使用d3.js作为图表。在某些时候,我必须显示数据与图的一些特殊部分,例如,如果值跨越某个边界然后显示具有填充模式的部分。更清楚的是有和图像。
我得到越过边界的矩形部分,但我怎么能用这种模式填充它? 任何CSS或画布技巧?
注意:这张图片只是一个不是真实的例子
答案 0 :(得分:21)
这个怎么样:
的 Live Demo 强>
<强> JS 强>
var svg = d3.select("body").append("svg");
svg
.append('defs')
.append('pattern')
.attr('id', 'diagonalHatch')
.attr('patternUnits', 'userSpaceOnUse')
.attr('width', 4)
.attr('height', 4)
.append('path')
.attr('d', 'M-1,1 l2,-2 M0,4 l4,-4 M3,5 l2,-2')
.attr('stroke', '#000000')
.attr('stroke-width', 1);
svg.append("rect")
.attr("x", 0)
.attr("width", 100)
.attr("height", 100)
.style("fill", 'yellow');
svg.append("rect")
.attr("x", 0)
.attr("width", 100)
.attr("height", 100)
.attr('fill', 'url(#diagonalHatch)');
<强>结果
答案 1 :(得分:1)
更改颜色很简单,只是一个条件if
语句。这是我以前用过的一个例子:
svg.selectAll("dot")
.data(data)
.enter().append("circle")
.attr("r", 3.5)
.style("fill", function(d) { // <== Add these
if (d.close >= 50) {return "red"} // <== Add these
else { return "black" } // <== Add these
;}) // <== Add these
.attr("cx", function(d) { return x(d.date); })
.attr("cy", function(d) { return y(d.close); });
添加模式会更加复杂,因为您首先必须将defs元素添加到SVG,然后将模式添加到其中
//first create you SVG or select it
var svg = d3.select("#container").append("svg");
//then append the defs and the pattern
svg.append("defs").append("pattern")
.attr("width", 5)
.attr("height", 5);