我发现这个 d3 示例显示了一个带有纯色背景和对角线图案的条形图。我试图通过修改“d”属性来修改它以显示点、实心、白色圆圈而不是线条,但我认为可能有更好的方法来做到这一点。
这是我的显示对角线的 fiddle :
http://jsfiddle.net/ljp007/gruc1vod/1/
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', '#fff')
.attr('stroke-width', 1);
svg.append("rect")
.attr("x", 0)
.attr("width", 100)
.attr("height", 100)
.style("fill", 'blue');
svg.append("rect")
.attr("x", 0)
.attr("width", 100)
.attr("height", 100)
.attr('fill', 'url(#diagonalHatch)');
这就是我要实现的目标:
这些点不绘制数据,而只是为了将此条与图表中的其他条区分开来。如何将线转换为点以实现此目的?
最佳答案
不要向填充图案添加路径,而是添加几个圆圈,并稍微修改图案的大小。
var svg = d3.select("body").append("svg");
var pattern = svg.append('defs')
.append('pattern')
.attr('id', 'dots')
.attr('patternUnits', 'userSpaceOnUse')
.attr('width', 12)
.attr('height', 12);
pattern.append('circle')
.attr('cx', 2)
.attr('cy', 2)
.attr('r', 2)
.attr('fill', 'white');
pattern.append('circle')
.attr('cx', 8)
.attr('cy', 8)
.attr('r', 2)
.attr('fill', 'white');
svg.append("rect")
.attr("x", 0)
.attr("width", 100)
.attr("height", 100)
.style("fill", 'blue');
svg.append("rect")
.attr("x", 0)
.attr("width", 100)
.attr("height", 100)
.attr('fill', 'url(#dots)');
cx
和 cy
属性设置圆心的 x 和 y 坐标,而 r
属性设置它的半径。
您还可以在圆圈之前的图案中附加一个蓝色实心矩形,从而无需在图表中创建背景和覆盖矩形。您可以将任何基本形状添加到图案中,当您使用它进行填充时,它们将连同它们的样式一起重复出现。
var svg = d3.select("body").append("svg");
var pattern = svg.append('defs')
.append('pattern')
.attr('id', 'dots')
.attr('patternUnits', 'userSpaceOnUse')
.attr('width', 12)
.attr('height', 12);
pattern.append('rect')
.attr('x', 0)
.attr('y', 0)
.attr('width', 12)
.attr('height', 12)
.attr('fill', 'blue');
pattern.append('circle')
.attr('cx', 2)
.attr('cy', 2)
.attr('r', 2)
.attr('fill', 'white');
pattern.append('circle')
.attr('cx', 8)
.attr('cy', 8)
.attr('r', 2)
.attr('fill', 'white');
// Now the pattern can be used and re-used to fill any shapes.
svg.append('rect')
.attr('x', 0)
.attr('width', 100)
.attr('height', 100)
.attr('fill', 'url(#dots)');
svg.append('circle')
.attr('cx', 160)
.attr('cy', 50)
.attr('r', 50)
.attr('fill', 'url(#dots)');
给出:
关于d3.js - 带点的 D3 条形图背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50320092/